繁体   English   中英

While 循环终止而不改变条件的值

[英]While loop terminates without changing the condition's value

我正在使用这段代码:

    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; 但是while循环不断终止。 finish变量不在其他任何地方使用。

我需要这个直到n == 0才终止

我假设您只想在 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;
        }
    }
}

上面的代码有效

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 语句中给出任何默认条件。 而且,当您不在 switch 块中给出默认语句时,代码将完全有效。 但是,程序的执行在 switch 块之后开始。

记下以下场景:

场景 1:当您给出 n = 0 时。output 将如下所示:

0
After the switch block
Just finished menu function

它第一次进入 switch 块并使完成变量为 true。 所以执行只会发生一次。

场景 2:当您给出 n = 1 或 2 或 3 或 4 时。 output 将如下:

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

这将是上述2两行的无限stream。 完成变量永远不会为真。 您将不得不手动停止该程序。

场景 3:当您给出 n = 5 或 case 块中不存在的任何内容时。 output 如下:

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

它将是上述行的无限 stream。 因为它不会进入任何 case 块,也不会在任何地方修改变量 finish。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM