在程式中,break 和 continue 是控制迴圈流程的重要關鍵字。單層迴圈時很直觀,但遇到巢狀迴圈時,不同語言的處理方式有所不同,值得整理一下。
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 label 或 continue 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 的 break 和 continue 後面可以接一個整數,表示要跳出幾層迴圈,不需要 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 變數 或 封裝為函式 |