You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Double类型计算异常:平均值结果为1.0而非1.8的问题求助

问题分析与解决建议

嗨,我看到你在大学项目里遇到了平均值计算的错误,咱们来快速定位并解决这个问题!

核心问题:整数除法导致精度丢失

你得到错误平均值的原因很简单——Java中的整数除法会自动舍去小数部分。

你的代码里,intSum和counter都是int类型:

double doubleAvg = 0;
if (counter > 0) {
    doubleAvg = intSum / counter;
}

当计算9 / 5时,因为两个都是整数,结果会被截断为1,之后再赋值给double类型的doubleAvg,就变成了1.0,而不是你期望的1.8。

解决方法:强制转换为浮点数除法

只需要把其中一个操作数强制转换为double,就能触发浮点数除法,保留小数部分:

double doubleAvg = 0;
if (counter > 0) {
    // 将intSum转为double后再进行除法
    doubleAvg = (double) intSum / counter;
}

这样(double)9 /5就会得到1.8,赋值给doubleAvg后就是正确的结果。

额外的代码优化建议

除了平均值的问题,你的代码还有一些可以简化的地方:

  • 初始化intLargest和intSmallest的判断完全冗余,直接赋值即可:
    intInput = sc.nextInt();
    intLargest = intInput;
    intSmallest = intInput;
    
    因为如果第一个输入是0,循环不会执行,后续输出的最小/最大值就是0,符合逻辑;如果输入非0,直接用第一个值初始化最大最小值也没问题。
  • 统计奇偶的else if可以简化为else,因为一个数要么是偶数要么是奇数,不需要再判断一次:
    if ((intInput%2) == 0) {
        intEven++;
    } else {
        intOdd++;
    }
    

修正后的完整代码片段

这里是调整后的关键部分和完整输出代码:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int counter = 0;
    int intInput;
    int intLargest;
    int intSmallest;
    int intEven = 0;
    int intOdd = 0;
    int intSum = 0;
    String strMessage = "Enter a series of value (0 to quit)";
    
    System.out.print(strMessage);
    System.out.println();
    System.out.print("Enter Integer value?" + "\n");
    
    intInput = sc.nextInt();
    intLargest = intInput;
    intSmallest = intInput;

    while(intInput != 0) {
        if (intInput > intLargest) {
            intLargest = intInput;
        } else if (intInput < intSmallest) {
            intSmallest = intInput;
        }
        
        if ((intInput%2) == 0) {
            intEven++;
        } else {
            intOdd++;
        }
        
        intSum = intSum + intInput;
        intInput = sc.nextInt();
        counter++;
    }

    double doubleAvg = 0;
    if (counter > 0) {
        doubleAvg = (double) intSum / counter;
    }

    System.out.println();
    System.out.print("Smallest = " + intSmallest +"\n");
    System.out.print("Largest = " + intLargest + "\n");
    System.out.print("Total Entered = " + counter + "\n");
    System.out.print("Even Number = " + intEven + "\n");
    System.out.print("Odd Number = " + intOdd + "\n");
    System.out.print("Average = " + doubleAvg + "\n");
    System.out.print("SUM: " + intSum + "\n");
}

现在运行你的测试输入3 -4 5 12 -7 0,就能得到正确的平均值1.8啦!

内容的提问来源于stack exchange,提问作者Duke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:35:32