Avatar
Benjibs
Člen
Avatar
Benjibs:

Mám tento kód:

http://www.itnetwork.cz/dev-lighter/124

Všeobecne na fórach som natrafil na názory, že break-u a continue je lepšie sa vyhýbat (kedže sú to vlastne GOTO). Ako upraviť cyklus for tak, aby v ňom break nebol potrebný?

Odpovědět 23.6.2013 9:18
1 + 1 = 2
Avatar
Lubos857
Člen
Avatar
Lubos857:

Konkrétně v tomto případě by se dala proměnná "is_prime" přesunout do podmínky ve for cyklu.

boolean is_prime = true;
for (int i = 2; i < (number / 2 + 1) && is_prime; i++ )
{
    if (number % i == 0)
    {
        is_prime = false;
    }
}

Nicméně obecně bych se vůbec breaku a continue nebál.

Nahoru Odpovědět  +1 23.6.2013 9:24
Protože bagr nežere cukr.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Pokus se to udělat bez proměnných is_prime a is_valid. Obvykle stačí trochu přeházet řádky a nebudeš potřebovat ani break. Testování prvočísla můžeš přesunout do try-catch včetně výstupu výsledku. Hlavní cyklus se pak nebude ptát na is_valid, ale zda chceš testovat další prvočíslo.

break a continue použít můžeš, ale je dobré jimi šetřit.

Nahoru Odpovědět 23.6.2013 9:49
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Benjibs
David Čápka:

Break se často nahrazuje returnem, když je kód v metodě.

Nahoru Odpovědět  +1 23.6.2013 10:16
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Tady to přímo vybízí k vytvoření metody

boolean is_prime(int number)

Výstup se pak krásně zjednoduší:

System.out.printf("Zadané číslo %d %s prvočíslem.",
    number, is_prime(number)?"je":"není");
Nahoru Odpovědět  +1 23.6.2013 10:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Benjibs
Člen
Avatar
Benjibs:

Neexistuje tu nejaká klauzula, ktorej blok kódu sa vykoná, keď cyklus vykoná všetky predom avizované iterácie? (bez breaku alebo vyvolania výnimky)

Pri písaní 'prvočíselných úloh' v iných jazykoch som sa vždy spoliehal na ňu.

Editováno 23.6.2013 10:40
Nahoru Odpovědět 23.6.2013 10:39
1 + 1 = 2
Avatar
Benjibs
Člen
Avatar
Benjibs:

Už ju nepotebujem, metóda to krásne vyriešila :)

Nahoru Odpovědět 23.6.2013 10:43
1 + 1 = 2
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Existuje hodně elegantních řešení. Ty nejlepší jsou známy pod pojmem "design patterns" neboli "návrhové vzory". Není však vhodné se je učit nazpaměť, je potřeba se k nim postupně propracovat.

Nahoru Odpovědět 23.6.2013 10:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Benjibs
Člen
Avatar
Benjibs:

Len ešte vyvstal z toho taký malý problémik :D
Vždy, keď dávam z definovanej metódy 'is_prime'

return nejaka_hodnota;

tak niečo zaprotestuje a označí mi to slovo void v metóde main, uprostred ktorej je tá moja metóda definovaná.
Alebo ju mám dať mimo main?

Nahoru Odpovědět 23.6.2013 11:07
1 + 1 = 2
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Dej ji mimo main, ale uvnitř class.

Nahoru Odpovědět 23.6.2013 11:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.