break 僅能跳出「迴圈」或「switch」語句,無法跳出 if-else 分支結構。 書本說法完全正確。
常見情況:break 出現在 if-else 內部,但該 if-else 嵌套在 for、while 或 do-while 迴圈中。
// 這段代碼中 break 其實跳出的是外層 while 迴圈
while (true) {
if (condition) {
break; // 跳出 while,非 if
} else {
// 其他邏輯
}
}
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 跳出 for 迴圈,i 不會繼續遞增
}
System.out.println(i); // 輸出 0-4
}
// 迴圈結束後繼續執行
| 類別 | 語句 | break 效果 |
|---|---|---|
| 迴圈語句 | for | ✅ 跳出迴圈 |
| while | ✅ 跳出迴圈 | |
| do-while | ✅ 跳出迴圈 | |
| 選擇語句 | switch | ✅ 跳出 switch |
| 分支語句 | if-else | ❌ 無效/編譯錯誤 |
| ?: 三元運算子 | ❌ 不適用 |
while (true) { // 第 1 層迴圈
for (int i = 0; i < 5; i++) { // 第 2 層迴圈
if (i == 2) { // 分支語句
break; // 跳出第 2 層 for 迴圈
}
}
// 執行這裡,第 1 層 while 繼續
}
C 語言標準不支援標籤跳出 (Java 支援 label: break label;),若需跳出多層迴圈:
int shouldBreak = 0;
while (true) {
for (int i = 0; i < 5; i++) {
if (i == 2) {
shouldBreak = 1;
break;
}
}
if (shouldBreak) break;
}
void process() {
while (true) {
for (int i = 0; i < 5; i++) {
if (i == 2) return; // 直接結束函數
}
}
}
while (true) {
for (int i = 0; i < 5; i++) {
if (i == 2) goto END_LOOP;
}
}
END_LOOP:
// 繼續執行