Diskuze: Smyčka do ... while
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
K čemu tam vůbec slouží ten while? Zdá se mi to zbytečné
Jasně, může se to pořešit pomocí if ... else. Ale zrovna ten cyklus studuju, tak si ho procvičuju. A je to proto, aby se zadání zopakovalo, pokud nebude stisknutá správná klávesa.
Skus načítat znak z klávesnice jiným způsobem, nebo si před načtením
znaku vymaž buffer = nauč se
se třídou Scanner
Jojo, se Scannerem umím odtud, v knížce používají tohle řešení, tak jdu jejich cestou, no. Zkusím použít ten Scanner.
Cyklus do-while je cyklus s podmínkou na začátku, od normálního cyklu while se liší tím, že mezi svorkami { } se kód vždycky provede alespoň 1x.
Já vím co je a jak funguje while cyklus
Jen mi přijde tady naprosto zbytečnej...
Není vůbec zbytečný a přijde mi to jako elegantní řešení. Mohlo by se to řešit ještě možná rekurzí a v nejhorším případě goto ...
Elegantní jo, kdyby se mi to neopakovalo 3x při nesprávném zadání .....
Do-while je nejlepší řešení, ale ty špatně načítáš znaky. Po
načtení jednoho znaku tam ty zbylé necháš a při příštím pokusu tam ty
zbylé načteš, zkus tam například napsat "test" a kolikrát se to
zopakuje.
Můžeš je vyprázdnit například tímto:
while(System.in.read()!='\n');
Nemohl bys mi to prosím tošku víc rozvést? Co mi tam zůstane za znaky?
Ten ENTER, kterým odešlu znak z klávesnice? Spustím, zadám 'L' a cyklus se
3x zopakuje než zůstane stát na tom System.in.read() - viz. obrázek. Na
"test" se zopakuje 6x - i tady je to o 2 více.
A prosím trošku nakopnout, jak vyprázdním ty ostatní znaky navíc.
Problém bude v tom načítání- pokud tomu dobře rozumím, tak ty zadáš 'znak<ENTER>' - enter je bílej znak, ale je tam taky- nechápu teda proč to tiskne 3x, mělo by jako jen 2x, ale to je vcelku jedno, princip je to tenhle..
Trochu jsem to upravil- do-while slouží jako menu, do switche přidal default case (ten se použije když nevyhovuje žádnej jinej), a potom to funguje jak předpokládám, po zadání znaku ok, následně jednou špatně, a opakuje se nová volba..
Btw dávej si pozor teď nevim jak to je sw switchem
http://www.itnetwork.cz/dev-lighter/426
Když ti to upravim ještě pro tu třídu Scanner tak to bude vypadat
takhle
http://www.itnetwork.cz/dev-lighter/427
Scanner.next() ti dá aktuální String ze standardního vstupu (cin, resp. klávesnice), následně .charAt(0) ti dá první znak z řetězce (požadovaný zadaný znak)
A jelikož je v jave možný přetékání Case u switche, tak to funguje i
takhle
http://www.itnetwork.cz/dev-lighter/428
Pokud načítáš znak tak se načtou všechny znaky dokud nezmáčkneš
ENTER, tedy pokud napíšeš "test" tak se ti načte "test" + konec řádku.
Konec řádku se označuje '\n' (a jestli se nepletu tak před tento znak
windows přidávají ještě '\r').
Pokud teda chceš odstranit ty navíc načtené znaky tak načítáš znaky
dokud nenalezneš '\n'.
jak píše tomisoka - \r a \n by pak vysvětlovalo proč to vypisuje 3x
Klucí, díky moc všem.
Zobrazeno 18 zpráv z 18.