我知道
break
语句可以跳出循环,但它是跳出嵌套循环还是只跳出当前的循环呢?不加修饰,break
将会跳出最内层循环。因此,在这段代码中:
while (true) { // A
while (true) { // B
break;
}
}
break
只能退出循环 B
,所以代码将会无限循环下去。
然而,Java 有一个叫做“命名的 break”功能,你可以为你的循环取一个名字,并指定要退出哪个循环。例如:
A: while (true) {
B: while (true) {
break A;
}
}
这段代码不会永远循环下去,因为 break
明确离开了循环 A
。
幸运的是,同样的逻辑对于 continue
也适用。默认情况下,continue
执行包含 continue
语句的最内层循环的下一个迭代,但也可以通过指定要继续执行的循环的标签来跳转到外部循环迭代。
在其他语言中(例如 C 和 C++),这种 “带标签的 break” 语句不存在,而且很难跳出多重嵌套的循环。虽然可以使用 goto
语句来实现,但通常被视为不良实践。例如,在 C 中,如果愿意忽略 Dijkstra 的建议并使用 goto
,嵌套的 break 可能看起来像这样:
while (true) {
while (true) {
goto done;
}
}
done:
// Rest of the code here.
希望这能帮到你!
你也可以使用异常来中断程序,这样你就可以处理多种情况。
void fkt1() {
try {
while (true)
fkt2();
} catch (YourAbortException e) {
e.printStackTrace();
}
//go on
}
void fkt2() {
while (true)
if (abort)
throw new YourAbortException();
}
它会打破一个循环。非常简单。例如:
for loop
for loop
break;
end for loop
end for loop
跳出内部循环但仍在外部循环中