Задать вопрос
x__miller_x
@x__miller_x

Почему do-while так работает?

Дня доброго!

Собственно, начал познавать Java, параллельно пробуя листинги из примеров в книжке. Дошел до do-while. И тут у меня возник ступор:
char i;
        boolean a;
        do {
            System.out.println("Введите значение от 1 до 3 ");
            i = (char) System.in.read();
            a = (boolean) (i<'1' | i>'3');
            System.out.println(a);
        }
        while (a);
        System.out.println(i);

или
char i;
        do {
            System.out.println("Введите значение от 1 до 3 ");
            i = (char) System.in.read();
        }
        while (i<'1' | i>'3');
        System.out.println(i);

Вводим i от 1 до 3 - все ок. Вводим i, большее 3 или меньшее 1 - строка "Введите значение от 1 до 3 " выводится дважды. Меняя условия, становится понятно, что дело в нем - оставляем только, например, i>3 - "Введите значение от 1 до 3 " повторяется 1 раз.

Отсюда вопрос: почему проверка while (i<'1' | i>'3'); выполняется в 2 захода, а не в 1? Какая в этом случае очередность выполнения кода? И как для моего примера сделать вывод условия только 1 раз?
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@hax
junior developer
Выводит дважды потому что после ввода числа ты нажимаешь клавишу "Enter" и поток передается символ '\n', который и обрабатывается второй раз. Так, например, если ты введешь число 4, то Java будет обрабатывать строку "4\n". Можешь добавить проверку на сравнение с символом '\n'.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Djaler
@Djaler
Сеньор-помидор
barker
@barker
Ну так перевод строки после первой цифры, не?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы