// for 循環
for (init; condition; increment) {
body;
}
// 等價 while 循環
init;
while (condition) {
body;
increment;
}
// for-each
for (Type item : collection) {
body;
}
// 等價 while (編譯器實際生成代碼)
Iterator<Type> it = collection.iterator();
while (it.hasNext()) {
Type item = it.next();
body;
}
// while
while (condition) {
body;
}
// 等價 for
for (; condition; ) {
body;
}
以下四種形式**全部合法**:
while (condition) ; // 空循環體
while (condition) { } // 空塊
for (init; condition; inc) ; // 空循環體
for (init; condition; inc) { } // 空塊
| 選項 | 正確性 | 理由 |
|---|---|---|
| a. for 可轉 while,while 可轉 for | ✅ 正確 | 雙向等價轉換成立 |
| b. 視出題者意圖(模糊) | ⚠️ 不確定 | 非標準判斷依據 |
| c. for-each 可轉 while (iterator) | ✅ 正確 | 編譯器確實如此生成 |
| d. 絕對錯誤 | ❌ 錯誤 | 空語句/空塊均合法 |
「for 三段式展開成 while,for-each 展開成 iterator 迴圈,while 收攏成 for(;;),空語句空塊都合法,選 a 和 c。」
outer: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (condition) break outer; // 跳出雙層
}
}
// while 版本需配合標籤同樣實現
outer: while (i < 10) { ... }
掌握循環結構互化本質,閱讀他人代碼、編寫編譯器優化、應試答題皆得心應手。