Я только что узнал, что при нажатии ввода в ответ на System.in.read()
в буфер консоли помещаются следующие символы: \r\n
. Поэтому, когда я ввожу в терминал 1
и нажмите клавишу ввода, компьютер считывает это заявление как 1\r\n
. Так не следует ли вызывать System.out.println("hello")
дважды? Потому что choice
сохранит значение 1
. Затем будет напечатан "hello"
. Затем ignore
будет удерживать значение \r
. Затем управление будет выдано петли while(ignore != '\n')
. Затем ignore
будет удерживать значение \n
. Затем будет напечатан "hello"
. А теперь, что ignore = \n
, код выйдет из цикла?Проблемы чтения из System.in.read()
class HelpClassDemo {
public static void main(String args[])
throws java.io.IOException {
char choice, ignore;
for(;;) {
do {
System.out.println("Help on:");
System.out.println(" 1. if");
System.out.println(" 2. switch");
System.out.println(" 3. for");
System.out.println(" 4. while");
System.out.println(" 5. do-while");
System.out.println(" 6. break");
System.out.println(" 7. continue\n");
System.out.print("Choose one (q to quit): ");
choice = (char) System.in.read();
do {
ignore = (char) System.in.read();
System.out.println("hello");
} while(ignore != '\n');
} while(choice < '1' | choice > '7' & choice != 'q');
if(choice == 'q') break;
}
}
}
где вы узнали об этом? и что заставляет вас думать, что это правда? и когда вы на самом деле пытались и регистрировали значение каждого результата вызова 'read', что вы получили? какой у Вас вопрос? – njzk2
Почему вы используете 'System.in.read()'? Вы должны использовать ['Scanner'] (http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html) – alfasin