問題代碼
public static void find(int[] numbers) {
int t = 128;
int i;
for (i = 0; i < t; i++); // ❌ 這裡多了一個分號!
{
System.out.println(i); // 只執行一次,i = 128
/* 註釋掉的邏輯 */
}
}
錯誤分析
| 代碼 | 等價邏輯 | 執行結果 |
for(i=0; i<t; i++); | 空語句循環 128 次,i 遞增至 128 | 循環結束後 i=128 |
{ System.out.println(i); } | 獨立代碼塊,非循環體 | 僅執行一次,輸出 128 |
正確寫法
for (i = 0; i < t; i++) { // ✅ 移除分號
System.out.println(i); // 循環體,執行 128 次 (0~127)
// 其餘邏輯...
}
同類陷阱大全
| 錯誤模式 | 現象 | 修正 |
if (condition); | 無條件執行後續塊 | 移除分號 |
while (condition); | 死循環或空循環 | 移除分號 |
for (...); | 空循環,後續塊只執行一次 | 移除分號 |
switch(x) { case 1: break;; } | 雙分號雖合法但易誤讀 | 單分號 |
預防技巧
編譯器視角
// 你寫的
for (i = 0; i < t; i++);
{
System.out.println(i);
}
// 編譯器看到的
for (i = 0; i < t; i++)
; // 空語句 (Null Statement)
{ // 獨立塊
System.out.println(i);
}
一個分號,改變整個程式邏輯。細節決定成敗。