在複雜巢狀迴圈中,精確控制跳出層級是常見需求。Java 提供 break 跳出單層迴圈,以及 labeled break 指定跳出目標層級。
boolean found = false;
for (int i = 0; i < 100; i++) {
if (checkCondition(i)) {
found = true;
break; // 立即跳出 for 迴圈
}
}
效果:跳出最內層的 for、while、do-while 或 switch 區塊。
標籤名: 迴圈陳述句 {
// ...
break 標籤名; // 跳出指定標籤的迴圈
}
outer: // 標籤放在外層迴圈前
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
char input = (char) System.in.read();
if (input == 'b') {
break outer; // 直接跳出雙層迴圈
}
if (input == 'c') {
continue outer; // 跳過內層剩餘,繼續外層下一輪
}
}
}
continue:跳過本輪剩餘,進入下一輪迭代(最內層)。continue 標籤:跳過指定標籤迴圈的本輪,進入其下一輪。| 場景 | 建議做法 |
|---|---|
| 雙層巢狀需全跳出 | labeled break / 重構為方法回傳 boolean |
| 三層以上巢狀 | 重構為獨立方法,用 return 提前結束 |
| 搜尋/比對演算法 | labeled break 可接受,註解說明意圖 |
| 一般業務邏輯 | 避免 labeled,改用方法拆分、Stream API、Optional |
searchLoop:、retryLoop:),避免 outer:、inner:。continue outer 在外層迴圈繼續前可執行清理邏輯。部分巢狀條件可改用 switch 表達式簡化:
String result = switch (status) {
case A -> { if (check()) break "OK"; break "FAIL"; }
case B -> "PENDING";
default -> "UNKNOWN";
};
此處 break "value" 為 switch 表達式回傳值語法,非迴圈 break。