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

数组平均值计算方法逻辑错误求助:结果异常问题排查

问题分析与修复方案

嘿,我一眼就揪出问题所在啦!你的代码返回错误结果的核心原因出在整数类型的自动截断上,咱们一步步拆解:

你把累加变量ave声明成了int类型,而且在循环里每次都把(tmp / A.size)的结果直接加到ave上。因为int类型只能存储整数,每次加法都会自动砍掉小数部分,导致累加结果被严重低估:

  • 第一个元素1:1.0/5=0.2,加到int类型的ave里直接变成0
  • 第二个元素9:9.0/5=1.8,加到ave里变成1
  • 第三个元素5:5.0/5=1.0,ave变成2
  • 第四个元素0:加0后还是2
  • 第五个元素7:7.0/5=1.4,加到ave里变成3
    这就是你得到3的根本原因!

两种修复方案

方案1:先累加总和,最后再求平均值(更高效推荐)

这种方式避免了多次除法和小数截断问题,逻辑也更清晰:

public static int Average(Array_one A) { 
    int sum = 0; 
    int[] a = A.values; 
    for (int i = 0; i < A.size; i++) { 
        sum += a[i]; 
    }
    // 如果需要带小数的精确平均值,把返回类型改成double,返回sum * 1.0 / A.size即可
    return sum / A.size;
}

方案2:将累加变量改为浮点类型

如果你坚持要在循环内分步计算,只需把ave改成double类型,最后再按需转成int:

public static int Average(Array_one A) { 
    double ave = 0.0; 
    int[] a = A.values; 
    for (int i = 0; i < A.size; i++) { 
        double tmp = a[i] * 1.0; 
        ave += (tmp / A.size); 
    }
    // 用Math.round()实现四舍五入,直接强制转换会截断小数
    return (int) Math.round(ave);
}

这样计算出来的ave会是准确的5.0,转成int后就是正确结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:36:48