Есть простой пример кода игры-угадайки.
public class Game {
public static void main(String[] args) throws java.io.IOException {
char ch, ignore;
do {
System.out.print("Введите нужную букву: ");
ch = (char) System.in.read();
do {
ignore = (char) System.in.read();
} while (ignore != '\n');
if (ch == 'a') {
System.out.println("Правильно!");
} else {
System.out.println("Неправильно!");
}
} while(ch != 'a');
}
}
Работает верно, однако если закомментировать
do {
ignore = (char) System.in.read();
} while (ignore != '\n');
То при неверно указанной букве сперва дважды выводится "Введите нужную букву: Неправильно!". Как я понимаю, эта конструкция отбрасывает лишние символы (если, например, ввести вместо 'b' 'bcd'), но почему тогда код срабатывает дважды сам по себе без нее?
System.in.read()
считывает только один символ. Но когда вы вводите ответ вы нажимаете букву и клавишу Enter (символ перевода строки). И оба этих символа попадают в поток.
Цикл извлекает из потока все символы, пока не встретит символ перевода строки.
Если цикл убрать, то первый вызов read()
прочтет букву, а второй вызов read()
прочтет перевод строки.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
На что ставят (VPS или что там) и на чём пишут сервера для Android-игр? Соединение держится между клиентом и сервером с помощью сокетов?
Можно ли как создать изображение с помощью java? Суть состоит в том, что будет получен многомерный массив чисел, те