Самопроизвольное срабатывание кода

238
12 апреля 2017, 13:08

Есть простой пример кода игры-угадайки.

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'), но почему тогда код срабатывает дважды сам по себе без нее?

Answer 1

System.in.read() считывает только один символ. Но когда вы вводите ответ вы нажимаете букву и клавишу Enter (символ перевода строки). И оба этих символа попадают в поток.

Цикл извлекает из потока все символы, пока не встретит символ перевода строки.

Если цикл убрать, то первый вызов read() прочтет букву, а второй вызов read() прочтет перевод строки.

READ ALSO
Сервер для android игры

Сервер для android игры

На что ставят (VPS или что там) и на чём пишут сервера для Android-игр? Соединение держится между клиентом и сервером с помощью сокетов?

203
Создание изображения Java

Создание изображения Java

Можно ли как создать изображение с помощью java? Суть состоит в том, что будет получен многомерный массив чисел, те

322
Проблема авторизации vk api

Проблема авторизации vk api

После успешного ввода логина и пароля, получаю данную ошибку:

255