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
@hax
junior developer
Выводит дважды потому что после ввода числа ты нажимаешь клавишу "Enter" и поток передается символ '\n', который и обрабатывается второй раз. Так, например, если ты введешь число 4, то Java будет обрабатывать строку "4\n". Можешь добавить проверку на сравнение с символом '\n'.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Djaler
@Djaler
Сеньор-помидор
barker
@barker
Ну так перевод строки после первой цифры, не?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽