問題代碼
while (number > 0); // <-- 這裡多了一個分號!
{
// 循環體
count++;
number /= 10;
}
錯誤機制
在 Java/C/C++ 中,while (condition) ; 是一條**完整的語句** (空語句)。
- 編譯器視為:`while (number > 0) { /* 空操作 */ }`
- 大括號 `{ ... }` 變成了一個**獨立的代碼塊**,順序執行一次,與 while 無關。
- 若 `number > 0`,空語句無限執行,**死循環**,程序卡住無響應。
修正代碼
while (number > 0) { // 刪除分號
count++;
number /= 10;
}
同類常見錯誤
| 錯誤代碼 | 現象 | 修正 |
for (int i=0; i<10; i++); | 循環體不執行,i 變 10 後執行一次大括號塊 | 刪除分號 |
if (x > 0); | 無條件執行後續大括號塊 | 刪除分號 |
if (x > 0); else ... | 編譯錯誤:`else` 無匹配 `if` | 刪除分號 |
預防建議
- 編碼風格:`{` 不換行,緊跟 `)`:`while (cond) {` → 視覺上更難誤加分號。
- IDE 警告**:啟用「Empty statement」/「Statement has empty body」警告 (IntelliJ: `Editor → Inspections → Java → Probable bugs → ';' at end of 'while' statement`)。
- 靜態分析**:SpotBugs, SonarQube, Checkstyle 可檢測空循環體。
- 代碼審查**:關注所有控制流語句後的分號。