Дня доброго!
Собственно, начал познавать 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 раз?