首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 流程控制進階:break 跳出與 labeled 標籤控制巢狀迴圈

     編輯:Java 相關知識

break 與 labeled 標籤機制

在複雜巢狀迴圈中,精確控制跳出層級是常見需求。Java 提供 break 跳出單層迴圈,以及 labeled break 指定跳出目標層級。

1. 基本 break 用法

boolean found = false;
for (int i = 0; i < 100; i++) {
    if (checkCondition(i)) {
        found = true;
        break; // 立即跳出 for 迴圈
    }
}

效果:跳出最內層的 for、while、do-while 或 switch 區塊。

2. Labeled Break:指定跳出目標

語法

標籤名: 迴圈陳述句 {
    // ...
    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; // 跳過內層剩餘,繼續外層下一輪
        }
    }
}

3. Labeled Continue 搭配使用

  • continue:跳過本輪剩餘,進入下一輪迭代(最內層)。
  • continue 標籤:跳過指定標籤迴圈的本輪,進入其下一輪。

4. 適用場景與替代方案

場景建議做法
雙層巢狀需全跳出labeled break / 重構為方法回傳 boolean
三層以上巢狀重構為獨立方法,用 return 提前結束
搜尋/比對演算法labeled break 可接受,註解說明意圖
一般業務邏輯避免 labeled,改用方法拆分、Stream API、Optional

5. 最佳實務建議

  1. 標籤命名:使用語意化名稱(searchLoop:、retryLoop:),避免 outer:、inner:。
  2. 文件化:標籤上方加註解說明跳出條件與目的。
  3. 避免濫用:過度使用 labeled 降低可讀性,優先考慮方法萃取。
  4. 搭配 continue:continue outer 在外層迴圈繼續前可執行清理邏輯。

6. 進階:Java 12+ Switch 表達式替代

部分巢狀條件可改用 switch 表達式簡化:

String result = switch (status) {
    case A -> { if (check()) break "OK"; break "FAIL"; }
    case B -> "PENDING";
    default -> "UNKNOWN";
};

此處 break "value" 為 switch 表達式回傳值語法,非迴圈 break。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved