arteqrt
@arteqrt
Почти не начинающий програмист

Объясните почему работает именно так?

public class javart {
    public static void main(String[]args)
    throws java.io.IOException {
            char ch, ignore, answer = 'S';
            do {
                System.out.println("Зaдyмaнa буква из диапазона A-Z.");
                System.out.print("Пoпытaйтecь ее угадать: ");
                // Получить символ с клавиатуры
                ch = (char) System.in.read();
                // Отбросить все остальные символы во входном буфере
                do {
                    ignore = (char) System.in.read();
                } while(ignore != '\n'); 
            if(ch == answer) System.out.println("** Правильно! **");
                else {
                System.out.print(" ... Извинитe, нужная буква находится ");
                if(ch < answer)
                System.out.println("ближe к концу алфавита");
                else System.out.println("ближe к началу алфавита");
                System.out.println("Пoвтopитe попытку!\n");}
                
            }while(answer != ch); 
            }

    }


do {
      ignore = (char) System.in.read();
 } while(ignore != '\n');

Я знаю что он пропускает запись в буфер и тем самым избегает повторного вывода условий, но почему так?
Почему он их пропускает, а не является "бессмысленным"? Я понимаю эту логику так, берем значение ввода клавиатуры до того момента, пока не будет перенос строки, потом продолжаем выполнять основной цикл. И по идее этот цикл просто "бесполезный" Поясните пожалуйста.
  • Вопрос задан
  • 303 просмотра
Решения вопроса 2
LaRN
@LaRN
Senior Developer
Похоже это сделано, чтобы убрать возможные дубли. Нажмите на кнопку клавиатуры и держите, вы увидите, что будет напечатана не одна буква, а серия. И вся эта серия улетит в System.in.
Вот и получается либо нужно пропустить все что идёт за первой буквой, либо на экране будет несколько сообщений подряд о том что попытка отгадать провалилась. Т.е. тут как бы расчищается дорога для следующей попытки.
Ответ написан
@Cheypnow
Сначала считывается первый введенный символ и сохраняется в пееременную ch:
ch = (char) System.in.read();
Затем в цикле пропускается все что вводится с клавиатуры пока не будет нажата клавиша переноса строки.
Сделано видимо для того чтобы для определения правильный ли был дан ответ использовался только первый введенный символ (то есть переменная ch).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы