
Diletant v Javě
Podle učebnice Javy jsem napsal, zkompiloval a v cml spustil tento prográmek
// Cyklus běží do zapsání znaku S.
class TestFor {
public static void main(String args[])
throws java.io.IOException {
int i;
System.out.println("Stiskněte S pro zastaveni.");
for (i = 0; (char) System.in.read() != 'S'; i++)
System.out.println("Pruchod c." + i);
}
který jsem pochopil tak, že dokud nenapíšu písmeno S, bude probíhat cyklus (respektive cyklus proběhne jednou pokaždé, když zapíšu jiné písmeno než S, a program skončí v momentě, kdy napíšu S). Ve skutečnosti ale když napíšu jiné písmeno než S, cyklus proběhne 3x. Např. napíšu A a potvrdím Enter, a program vypíše:
Průchod č.0
Průchod č.1
Průchod č.2
Můžete mi prosím pomoct pochopit, proč cyklus proběhne 3x a ne 1x?
jednoduche. system.in.read ocakava znaky. ty si mu poslal A a ENTER. Enter su v podstate 2 znaky. CHAR(10) a CHAR(13). Preto 3x :)
Díky za pomoc,
já se mezitím dál v učebnici dočetl co s tím a tak jsem prográmek trochu přepracoval - deklaroval jsem proměnnou ignoruj a přidal cyklus do, který vymaže všechny zadané znaky kromě prvního.
/* Cyklus běží do zapsání znaku S.
*/
class TestFor {
public static void main(String args[])
throws java.io.IOException {
int i;
char ignoruj;
System.out.println("Stiskněte S pro zastaveni.");
for (i = 0; (char) System.in.read() != 'S'; i++){
do {
ignoruj = (char) System.in.read();
} while (ignoruj != '\n');
System.out.println("Pruchod c." + i);
}
}
}