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

Java 計算整數各位數字之和:死循環 Bug 修復

     編輯:程式設計綜合問答

問題代碼分析

public static int sumDigits(long n) {
    int sum = 0;
    int Temp;
    while (n != 0) {
        int remainder = (int)n % 10;
        sum += remainder;
        Temp = (int)n / 10;
        // 缺少關鍵行:n = Temp;
    }
    return sum; // 死循環,n 永遠不變
}

Bug 根因

循環體內計算了 `Temp = n / 10`,但未將 Temp 賦值回 n。導致 `n` 永遠保持原值,條件 `n != 0` 永遠為真,陷入死循環。

修復代碼

public static int sumDigits(long n) {
    int sum = 0;
    while (n != 0) {
        int remainder = (int)(n % 10);
        sum += remainder;
        n = n / 10; // 關鍵:更新 n,移除最後一位
    }
    return sum;
}

執行流程演示

輸入 `234`:

循環輪次n 值remainder (n%10)sum 累加n 更新 (n/10)
12344423
223372
32290
40-結束-

進階優化:處理負數

public static int sumDigits(long n) {
    int sum = 0;
    n = Math.abs(n); // 支持負數
    while (n != 0) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

遞歸寫法(拓展思維)

public static int sumDigitsRecursive(long n) {
    n = Math.abs(n);
    if (n == 0) return 0;
    return (int)(n % 10) + sumDigitsRecursive(n / 10);
}

常見錯誤總結

  • 忘記更新循環變量 → 死循環
  • 未處理負數 → 結果異常
  • 用 `int` 接收 `long` 參數 → 可能溢出

調試技巧

遇到「無輸出」或「程序卡住」,優先檢查循環終止條件是否能被滿足,在循環內加打印日誌或斷點觀察變量變化。

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