Пока l oop завершается без изменения значения условия - PullRequest
1 голос
/ 06 апреля 2020

Я использую этот код:

    public void menu() {
        boolean finish = false;
        while (!finish) {
            // print menu
            int n = // acquire selection through other method of the program
            switch (n) {
                case 0:
                    finish = true;
                    break;
                case 1:
                    // do stuff 1
                    break;
                case 2:
                    // do stuff 2
                    break;
                case 3:
                    // do stuff 3
                    break;
                case 4:
                    // do stuff 4
                    break;
            }
        }

    }

Я пытался поместить finish = true; прямо перед всеми break;, но пока l oop продолжает завершаться. Переменная finish больше нигде не используется.

Мне нужно, чтобы она не заканчивалась до n == 0

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020
public class Test {
    public static void main(String[] args) {
        WhileTest whileTest = new WhileTest();
        whileTest.menu();
        System.out.println("Just finished menu function");
    }
}

class WhileTest {
    public void menu() {
        boolean finish = false;
        while (!finish) {
            // print menu
            int n = 0; // acquire selection through other method of the program
            switch (n) {
                case 0:
                    finish = true;
                    System.out.println(0);
                    break;
                case 1:
                    // do stuff 1
                    System.out.println(1);
                    break;
                case 2:
                    // do stuff 2
                    System.out.println(2);
                    break;
                case 3:
                    // do stuff 3
                    System.out.println(3);
                    break;
                case 4:
                    // do stuff 4
                    System.out.println(4);
                    break;
            }
            System.out.println("After the switch block");
        }

    }


}

Обратите внимание, что вы не задали никаких условий по умолчанию в операторе switch. И если вы не дадите оператор по умолчанию в блоке переключателя, код будет совершенно корректным. Однако выполнение программы начинается после кадра переключения.

Запишите следующий сценарий:

Сценарий 1: Когда вы дадите n = 0. Вывод будет следующее:

0
After the switch block
Just finished menu function

В первый раз он переходит к блоку переключателей и устанавливает переменную fini sh в значение true. Таким образом, выполнение будет происходить только один раз.

Сценарий 2: когда вы дадите n = 1, или 2, или 3, или 4. Вывод будет следующим:

4
After the switch block
4
After the switch block
4
After the switch block

Это будет бесконечный поток из двух вышеуказанных двух строк. Переменная fini sh никогда не становится истинной. Вам придется вручную остановить программу.

Сценарий 3: , когда вы даете n = 5 или что-то, чего нет в блоке case. Вывод будет следующим:

After the switch block
After the switch block
After the switch block
After the switch block
After the switch block
After the switch block

Это будет бесконечный поток вышеуказанных строк. Поскольку он не собирается ни в один из блоков case, ни переменная fini sh нигде не изменяется.

0 голосов
/ 06 апреля 2020

Я предполагаю, что вы хотите подключиться только тогда, когда n = 0

  public static void main(String[] args) {

    boolean finish = false;
    while (!finish) {
        // print menu
        System.out.println("NEXT!");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        switch (n) {
            case 0:
                finish = true;
                break;
            case 1:
                System.out.println("1");
                break;
            case 2:
                System.out.println("2");
                break;
            case 3:
                System.out.println("3");
                break;
            case 4:
                System.out.println("4");
                break;
        }
    }
}

Код выше работает

...