Методы switch и do-while, бесконечный цикл.

 
 
 
Сообщения:2
Всем привет, только изучаю в Джаве циклы, учу пока по Шилду. Столкнулся с простой программой Help, реализованной в начале через switch, где просто по номеру выводится описание нужного метода. С самой программой вопросов не возникло: ввел число, команда сработала, программа закрылась.
И захотел я прикрутить к ней цикл, который бы при вводе числа вне заданного диапазона возвращал бы меня обратно к вводу, пока я не введу команду для System.exit(0). Сделал я это через do-while, так как хочу с ним потренироваться.
Но столкнулся с тем, что при вводе числа срабатывает нужный кейс, но в конце всегда вылезают методы из default свитча.
Справка:
1. if
2. switch
3. for

Выберите: 1
Инструкция if:

if (условие) инструкция:
else инструкция
Выберите: Запрос не найден, повторите ввод.
Для выхода из программы введите 0.

Поскольку "Выберите:" у меня идет в начале цикла, то судя по результату он заканчивает цикл switch, прогоняет его еще раз в холостую выводя первый метод цикла и ветвь default, а потом при 3 проходе уже снимает команду.
Как эту проблему пофиксить? Без использования do-while ветвь default не выкобенивается.

public class Help {
    public static void main (String args[])
            throws java.io.IOException {
        System.out.println("Справка:");
        System.out.println("\t1.\tif");
        System.out.println("\t2.\tswitch");
        System.out.println("\t3.\tfor");
        System.out.println("Для выхода из программы введите 0.");

        char choice;
        System.out.print("\n");

        do {
            System.out.print("Выберите:\t");
            choice = (char) System.in.read();
            switch (choice) {
                case '0': System.exit(0);
                case '1':
                    System.out.println("Инструкция if:\n");
                    System.out.println("if (условие) инструкция:");
                    System.out.println("else инструкция");
                    break;
                case '2':
                    System.out.println("Инструкция switch:\n");
                    System.out.println("switch (выраение) {");
                    System.out.println("\tcase константа: ");
                    System.out.println("\t\tПоследовательность инструкций");
                    System.out.println("\t\tbreak");
                    System.out.println("\t// ...");
                    System.out.println("}");
                    break;
                default:
                    System.out.println("Запрос не найден, повторите ввод.");
                    System.out.println("Для выхода из программы введите 0.");
                    break;
            }
        } while (choice > 3 | choice < -1);

    }
}
Изменен:25 мар 2020 21:09
 
 
Сообщения:987
перенеси строчку 37 после строчки 15.
 
 
Сообщения:2
windruf:
перенеси строчку 37 после строчки 15.

В этом случае do-while не затрагивает блок с переключателем вообще. Проверил сейчас, так оно и есть, программа просто циклится в бесконечном считывании команды, при чем похоже, что сначала она делает пустой круг, а считывает команду только при втором круге.

Справка:
1. if
2. switch
3. for
Для выхода из программы введите 0.

Выберите: 0
Выберите: Выберите: 1
Выберите: Выберите: 2
Выберите: Выберите: 3
Выберите: Выберите: 4
Выберите: Выберите: 5
Выберите: Выберите:
 
 
Сообщения:987
код в студию
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет