我知道break语句跳出循环,但它是跳出嵌套循环还是只跳出它当前所在的循环?
发布于 2011-02-24 05:41:38
没有任何修饰,break就会跳出最内层的循环。因此,在此代码中:
while (true) { // A
while (true) { // B
break;
}
}break只退出循环B,因此代码将永远循环。
但是,Java有一个称为“命名中断”的特性,您可以在其中命名循环,然后指定要中断的循环。例如:
A: while (true) {
B: while (true) {
break A;
}
}这段代码不会永远循环,因为break显式地离开了循环A。
幸运的是,同样的逻辑也适用于continue。默认情况下,continue执行包含continue语句的最内层循环的下一次迭代,但也可以通过指定要继续执行的循环的标签来跳转到外部循环迭代。
在Java语言以外的语言中,例如C和C++,这种“标记为break”的语句是不存在的,并且不容易打破多重嵌套循环。这可以使用goto语句来完成,尽管这通常是不受欢迎的。例如,假设您愿意忽略Dijkstra的建议并使用goto,那么在C中嵌套的break可能是什么样子
while (true) {
while (true) {
goto done;
}
}
done:
// Rest of the code here.希望这能有所帮助!
发布于 2011-02-24 05:40:40
默认情况下,它跳出最内层的循环。但是你也可以使用specify labels and make it jump of outer loops。
发布于 2013-09-07 20:49:46
您还可以通过使用异常来突破,这样您就可以处理多种原因
void fkt1() {
try {
while (true)
fkt2();
} catch (YourAbortException e) {
e.printStackTrace();
}
//go on
}
void fkt2() {
while (true)
if (abort)
throw new YourAbortException();
}https://stackoverflow.com/questions/5097513
复制相似问题