![](/img/trans.png)
[英]Unable to stop a while loop in a Thread by changing it's boolean condition
[英]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.