二维数组平均值计算方法逻辑错误:结果始终输出1
问题分析与修正方案
嘿,我来帮你揪出代码里的问题!你的平均值计算方法一直输出1,主要有几个关键错误,咱们一个个拆解:
1. 完全错误的累加逻辑
你现在的代码里,每次循环都直接把a.values[i][j] / total赋值给average,而不是累加所有元素的总和。这意味着最后average只会保留最后一个元素除以总数的结果,根本不是所有元素的平均值。如果刚好最后一个元素等于total,那结果自然就是1啦。
2. 整数除法的截断坑
average被定义成了int类型,而且a.values[i][j]和total都是整数,Java里整数除法会直接舍去小数部分。哪怕前面的累加逻辑对了,也会因为这个导致结果失真。
3. 未正确引用对象的成员变量
内层循环里的cols没有加a.前缀,这会导致编译报错(除非你有全局的cols变量,但显然这里应该用Array_two对象里的cols属性)。
修正后的代码
public static double Ave(Array_two a) { // 用double存储总和,避免整数运算的截断问题 double sum = 0.0; int total = a.rows * a.cols; // 先遍历所有元素,累加总和 for (int i = 0; i < a.rows; i++) { for (int j = 0; j < a.cols; j++) { // 这里修正为a.cols sum += a.values[i][j]; } } // 最后用总和除以元素总数得到平均值 return sum / total; }
额外说明
- 把总和变量改成
double类型,这样无论是累加整数还是小数,都能保留精度,最后除以总数时也能得到正确的浮点数结果。 - 先完成所有元素的累加再做除法,这才是计算平均值的正确逻辑。
- 确保所有类成员变量都通过
a.来引用,避免变量混淆或编译错误。
内容的提问来源于stack exchange,提问作者user9701731
相关产品推荐
相关产品推荐

