break 與 continue 是迴圈流程控制的核心關鍵字。break 用於終結迴圈,continue 用於跳過本次迭代。掌握它們在巢狀迴圈、標籤跳轉中的行為,能寫出更清晰、高效的迴圈邏輯。
int i = 0;
while (i < 10) {
i++;
if (i == 5) {
break; // 直接結束整個 while 迴圈
}
}
// 迴圈結束後繼續執行後續程式碼
適用於 for、while、do-while 三種迴圈,功能一致:立即跳出所在迴圈。
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(j);
if (j == 3) {
break; // 只跳出內層 j 迴圈
}
}
// 外層 i 迴圈繼續執行
}
鐵律: 無標籤 break 只能跳出最內層迴圈。
outer: // 標籤名稱,任意合法識別符,後接冒號
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(j);
if (j == 3) {
break outer; // 直接跳出標籤對應的外層迴圈
}
}
}
break 標籤名 可跳出任意層級外層迴圈。if 區塊)。boolean done = false;
for (int i = 0; i < 10 && !done; i++) {
for (int j = 0; j < 5; j++) {
if (j == 3) {
done = true;
break; // 跳出內層
}
}
}
// 外層迴圈條件 !done 失效,自然結束
無標籤環境下的通用寫法,可讀性略優於標籤(視團隊風格)。
int i = 0;
while (i < 4) {
i++;
if (i == 2) {
continue; // 跳過本次剩餘迴圈體
}
System.out.println(i); // i=2 時不會執行
}
// 輸出:1, 3, 4
跳轉目標差異:
while/do-while:跳至條件判斷處。for:跳至迭代運算式(i++)處,再判斷條件。outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 5; j++) {
System.out.println(j);
if (j == 3) {
continue outer; // 直接跳至外層迴圈的 i++ 處
}
}
}
效果等同於結束本次外層迭代,直接進入下一次外層迭代。
| 關鍵字 | 作用範圍 | 巢狀迴圈預設行為 | 標籤用法 | 典型應用場景 |
|---|---|---|---|---|
| break | 所在迴圈 / switch | 只跳出最內層 | break label; 跳出指定外層 | 找到目標提前結束搜尋、異常情況退出 |
| continue | 所在迴圈 | 只跳過最內層本次迭代 | continue label; 跳過指定外層本次迭代 | 過濾不符條件資料、跳過錯誤記錄繼續處理 |
while (condition) 表達的邏輯,別用 break。for-each 迴圈不支援 break/continue 標籤,需改用索引迴圈。break = 結束,continue = 跳過。巢狀迴圈預設只影響最內層,標籤提供精準外層控制。善用它們能簡化邏輯,濫用則製造難讀程式碼。原則:能用條件表達就用條件,實在需要才跳轉。