tem*_*def 81
没有任何装饰,break只会突破最内层的循环.因此在这段代码中:
while (true) { // A
while (true) { // B
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在break只有退出循环B,所以代码将永远循环.
但是,Java有一个名为"命名中断"的功能,您可以在其中命名循环,然后指定要突破的循环.例如:
A: while (true) {
B: while (true) {
break A;
}
}
Run Code Online (Sandbox Code Playgroud)
此代码不会永远循环,因为break显式离开循环A.
幸运的是,这同样的逻辑适用于continue.默认情况下,continue执行包含continue语句的最内层循环的下一次迭代,但也可以通过指定循环标签继续执行来跳转到外循环迭代.
在Java以外的语言中,例如C和C++,这种"标记中断"语句不存在,并且不容易打破多重嵌套循环.它可以使用goto语句来完成,尽管这通常是不受欢迎的.例如,假设您愿意忽略Dijkstra的建议并使用goto以下内容,这就是嵌套中断在C中的样子:
while (true) {
while (true) {
goto done;
}
}
done:
// Rest of the code here.
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!