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

Java 基礎練習:統計正負數個數、總和與平均值的正確實現

     編輯:程式設計綜合問答

問題背景

編寫一個 Java 程序,讀取未指定數量的整數,統計正數與負數的個數,計算所有輸入值的總和與平均值(不計入 0)。當輸入 0 時程序結束,平均值以浮點數顯示。

原始代碼存在的邏輯錯誤

import java.util.Scanner;
public class TextXXXXX {
    public static void main (String[] args){
        Scanner input = new Scanner(System.in);
        int count1 = 0 , count2 = 0 , sum = 0 , num;
        double avg;
        System.out.print("請輸入一個整數,輸入0時結束:");
        num = input.nextInt();
        while(num != 0){
            System.out.print("請輸入一個整數,輸入0時結束:");
            num = input.nextInt();
            while(num > 0)
                count1+=1;
            while(num < 0)
                count2+=1;
            sum+=num;
        }
        avg = sum /(count1 + count2);
        System.out.println("整數個數為:" + count1 + " 負數個數為:" + count2);
        System.out.println("和為:" + sum);
        System.out.println("平均值為:"+ avg);
    }
}

主要問題:

  • 使用了 while(num > 0) 和 while(num < 0),這會導致當輸入正數或負數時進入無限循環,因為 num 值未在循環內改變。
  • 統計邏輯應使用 if 判斷而非 while 循環。
  • 平均值計算需強制浮點數除法,否則會發生整數除法截斷。

修正後的正確實現

public static void main(String[] args) {
    int count1 = 0, count2 = 0, sum = 0, num;
    double avg;
    Scanner input = new Scanner(System.in); // Scanner 提升到循環外,避免重複創建

    for (;;) { // 無限循環,內部通過 break 退出
        System.out.print("請輸入一個整數,輸入0時結束:");
        num = input.nextInt();
        if (num == 0) break; // 輸入 0 結束
        if (num > 0) count1++;
        if (num < 0) count2++;
        sum += num;
    }

    // 避免除以零,並確保浮點數運算
    if (count1 + count2 > 0) {
        avg = sum * 1.0 / (count1 + count2);
    } else {
        avg = 0;
    }

    System.out.println("正數個數為:" + count1 + " 負數個數為:" + count2);
    System.out.println("和為:" + sum);
    System.out.println("平均值為:" + avg);
}

關鍵修正點總結

  1. 將 Scanner 實例化移至循環外,提升性能。
  2. 使用 for(;;) 或 while(true) 搭配 break 控制流程,結構更清晰。
  3. 用 if 替換 while 進行正負數判斷,避免死循環。
  4. 平均值計算時乘以 1.0 強制提升為 double 運算。
  5. 增加邊界檢查,防止無輸入時除以零。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved