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

Člen

Zobrazeno 16 zpráv z 16.
//= 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.
Co se ti na výstupu nezdá? Pokud nechceš dokola vypisovat úvodní
hlášku, musíš její výpis umístit nad cyklus - nikoli do něj.
EDIT: promiň, nestihl jsem přečíst editaci
nezdá se mi ta desítka... Vše co jsem udělal je, že jsem napsal znak 'a'
, a zbytek se doplnil sám...
Napište znak a já vám vrátím jeho číselnou hodnotu!
Pro ukončení napište "0"
aDoplnil jsem jen tohle
97Tohle se doplnilo jakmile jsem stiskl enter
Napište znak a já vám vrátím jeho číselnou hodnotu!A tohle taky
Pro ukončení napište "0"A tohle taky
10A tohle taky
Napište znak a já vám vrátím jeho číselnou hodnotu!A tohle taky
Pro ukončení napište "0"//A tohle taky
Tam budou IMHO blbnout konce řádků, které se zadávají z konzole, \n má ASCII 10. Čti to pomocí Scanneru jak je to tu ukázané v tutoriálech.
Tak jsem upravil kód na:
public static void main(String[] args) throws java.io.IOException {
char znak=0;
while (znak!='1') {
znak=(char)System.in.read();
System.out.println((int)znak);
}
}
Ale výsledek je pořád stejný...Když zadám písmenko a,na nový řádek se mi vytiskne "97" (což je správně),ale na další se bezprostředně vytiskne "10"...
musíš vyprázdnit input ( načíst zbylé znaky)
tohle by mělo fungovat:
...
znak = System.in.read();
if(znak!='\n')while( System.in.read()!='\n');
...
David Hartinger má pravdu. I přes třídu Scanner jsou tam furt potíže s ukončením řádku. Možná neohrabané, ale funkční řešení:
BufferedReader w = new BufferedReader(new InputStreamReader(System.in));
char znak = 0;
while (znak != '0') {
System.out.print("Napište znak a já vám vrátím jeho číselnou hodnotu!\nPro ukončení napište \"0\"\n");
znak = w.readLine().charAt(0);
System.out.println((int) znak);
}
Přes scanner musíš číst jako nextLine().charAt(), ne jako nextChar
a neměla by být v tom nextLine().charAt() ve druhé závorce 0? Já jsem v
programování naprostý začátečník, jen mě to tak napadlo, protože bez
té nuly to hlásilo chybu... A napadlo mě to prostě jen tak, aby ta závorka nebyla prázdná a k
mému překvapení to funguje...
Psal jsi že i se scannerem ti to nešlo, takže jsi ho použít musel nextLine() maže z bufferu znak \n.
Kód sem přepsal na tohle:
public static void main(String[] args) throws java.io.IOException {
Scanner sc=new Scanner(System.in);
System.out.println("Hello world!");
char znak,a;
for(;;){
System.out.print("Napište znak a já vám vrátím jeho číselnou hodnotu!\nPro ukončení napište \"1\"\n");
znak=(char)System.in.read();
do {a=(char)System.in.read();
}while(a!='\n');
if(znak=='1'){break;}
else {System.out.println((int)znak);}
}
}
A funguje...tu část:
do {a=(char)System.in.read();
}while(a!='\n');
Mám z jedné knihy o javě...Ale nechápu co přesně to dělá...Chápu
tedy že jde o to, že když stisknu nějakou klávesu a ještě i enter, tak se
uloží i hodnota klávesy enter,ale nechápu jakým způsobem se ten enter
"vymaže", co přesně ta část kódu dělá... :/
Nemá prosím někdo nějaký odkaz, kde bych se o tom něco mohl dočíst? Moc
tomu nechápu... :/
Smyčka do-while dělá v podstatě to samé jako smyčka while, ale s tím
rozdílem, že máš zaručeno, že se smyčka provede alespoň 1-krát. Jinak
řečeno, u do-while se podmínka pro pokračování kontroluje až na konci
smyčky, ne na začátku jako u while.
Tvůj kód čte znaky, dokud nenarazí na konec řádku a poté vypíše
číselnou hodnotu pouze posledního znaku.
Zobrazeno 16 zpráv z 16.