首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 迴圈分號陷阱:for 循環後多一個分號導致邏輯錯誤

     編輯:程式設計綜合問答

問題代碼

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;; }雙分號雖合法但易誤讀單分號

預防技巧

  • IDE 開啟「Empty statement」警告(IntelliJ: Settings → Editor → Inspections → Java → Control flow → Empty statement)
  • 養成 {} 另起一行習慣:
    for (int i = 0; i < n; i++)
    {
        // body
    }
  • Code Review 重點檢查控制流語句後是否緊跟分號
  • 使用靜態分析工具:SpotBugs、SonarQube、Checkstyle

編譯器視角

// 你寫的
for (i = 0; i < t; i++);
{
    System.out.println(i);
}

// 編譯器看到的
for (i = 0; i < t; i++)
    ;  // 空語句 (Null Statement)

{     // 獨立塊
    System.out.println(i);
}

一個分號,改變整個程式邏輯。細節決定成敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved