初學者在多線程或循環控制中常見困惑:`if`判斷語句究竟應放在`for`循環內部還是外部?
判斷條件依賴的變量在哪裡改變,`if`就必須放在哪裡。
// ❌ 錯誤:if在循環外,num不再變化
int num = 0;
for (int i = 0; i < 10; i++) {
num += i;
}
if (num > 20) { // 只執行一次,無法捕獲循環中間狀態
// ...
}
// ✅ 正確:if在循環內,每次迭代都檢查
for (int i = 0; i < 10; i++) {
num += i;
if (num > 20) { // 即時響應num的變化
// 處理邏輯
break; // 可選:滿足條件提前退出
}
}
在多線程環境下,還需考慮內存可見性:
// 共享標誌位必須用volatile或Atomic
volatile boolean flag = false;
// 線程1
for (int i = 0; i < 100; i++) {
// 做耗時操作
if (shouldStop()) { // 每次迭代檢查外部中斷信號
flag = true;
break;
}
}
// 線程2
while (!flag) {
// 等待線程1完成
}
`if`屬於`for`循環內部,這不是語法規定,而是邏輯必然。只要記住「哪裡變、哪裡查」,就不會再迷路。