Contents

程式 continue/break 處理巢狀迴圈跳出整理

在程式中,breakcontinue 是控制迴圈流程的重要關鍵字。單層迴圈時很直觀,但遇到巢狀迴圈時,不同語言的處理方式有所不同,值得整理一下。

break 與 continue 基本用法

  • break:立即跳出當前迴圈,繼續執行迴圈後的程式碼。
  • continue:跳過本次迭代剩餘的程式碼,直接進行下一次迴圈條件判斷。
1
2
3
4
5
6
7
8
9
for (int i = 0; i < 5; i++) {
    if (i == 3) break;    // i=3 時跳出迴圈,輸出 0 1 2
    System.out.print(i + " ");
}

for (int i = 0; i < 5; i++) {
    if (i == 3) continue; // i=3 時跳過,輸出 0 1 2 4
    System.out.print(i + " ");
}

Java / JavaScript:使用 Label 跳出外層迴圈

Java 和 JavaScript 都支援 label 語法,可以對外層迴圈貼標籤,再用 break labelcontinue label 直接操作外層迴圈。

Java 範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (j == 1) {
            break outer;    // 直接跳出外層 outer 迴圈
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// 只輸出 i=0, j=0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
outer:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        if (j == 1) {
            continue outer; // 跳過外層本次迭代,繼續外層下一輪
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// 輸出 i=0,j=0 / i=1,j=0 / i=2,j=0

JavaScript 範例

JavaScript 語法與 Java 完全相同:

1
2
3
4
5
6
7
outer:
for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
        if (j === 1) break outer;
        console.log(`i=${i}, j=${j}`);
    }
}

PHP:使用數字控制層數

PHP 的 breakcontinue 後面可以接一個整數,表示要跳出幾層迴圈,不需要 label。

1
2
3
4
5
6
7
8
for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 3; $j++) {
        if ($j == 1) {
            break 2; // 跳出 2 層迴圈(等同於 Java 的 break outer)
        }
        echo "i=$i, j=$j\n";
    }
}
1
2
3
4
5
6
7
8
for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 3; $j++) {
        if ($j == 1) {
            continue 2; // 跳過外層本次迭代
        }
        echo "i=$i, j=$j\n";
    }
}

Python:使用 Flag 變數

Python 沒有 label 語法,也沒有數字控制層數,常見做法是使用旗標(flag)變數:

1
2
3
4
5
6
7
8
found = False
for i in range(3):
    for j in range(3):
        if j == 1:
            found = True
            break
    if found:
        break

另一個技巧是用函式包裝,透過 return 直接跳出:

1
2
3
4
5
6
7
8
def search():
    for i in range(3):
        for j in range(3):
            if j == 1:
                return i, j  # 直接結束整個函式
    return None

result = search()

各語言比較

語言 跳出外層迴圈方式
Java break label / continue label
JavaScript break label / continue label
PHP break 2 / continue 2
Python flag 變數 或 封裝為函式