Почему строка "Введите букву" выводится 2 раза?

введите сюда описание изображения

public class Main {
    public static void main(String[] args) throws IOException {
        char ch;
        do {
            System.out.println("Введите букву");
            ch = (char) System.in.read();
        } while (ch != 'q');
    }
}

Ответы (1 шт):

Автор решения: Sergey Zh.

Я использовал режим отладки (дебага), чтобы в этом разораться. Оказывается, когда вы вводите символ (например 'k') и нажимаете клавишу Enter, через поток System.in вводится 2 символа!

Первый - тот который вы ввели (например 'k'), а второй - невидимый символ перевода строки ('\n') из-за клавиши Enter. Соответственно мы 2 раза проходимся по циклу (так как в input потоке считались 2 символа).

И совершенно не имеет значения использовать ли цикл с постусловием do-while или с предусловием while.

→ Ссылка