我有一个当前方法,该方法应该显示2D的平均值,但是它输出的数字没有意义 例如; 1.0、2.0、3.0、4.0、5.0、6.0的平均值为3.5,但是我的程序将上述数字的平均值输出为10.5。
这是我下面的方法
public static double getAverage(double[][] array1) {
double total = 0; //Accumulator
int num = 0;
for(int row = 0; row < array1.length; row++)
{
for(int col =0; col < array1[row].length; col++)
total += array1 [row][col];
num += 1;
}
return total / num;
}
答案 0 :(得分:1)
一个简单的版本就是
public static double getAverage(double[][] a) {
return Arrays.stream(a)
.flatMapToDouble(Arrays::stream)
.average()
.orElseThrow(() -> new IllegalArgumentException("no elements in the array"));
}
您的错误是您在num
循环中增加row
,而应该在col
循环中进行。
一个有趣的版本会
for (int row = 0; row < array1.length; row++)
for (int col = 0; col < array1[row].length; total += array1[row][col++], num++);
答案 1 :(得分:0)
您的num
变量正在计算行数,而不是像预期的那样计算单元格数。
尝试而不是
for(int col =0; col < array1[row].length; col++)
total += array1 [row][col];
num += 1;
为此:
for(int col =0; col < array1[row].length; col++) {
total += array1 [row][col];
num += 1;
}
[我删除了我在这里写的一个错误]
答案 2 :(得分:0)
将num += 1;
更改为
num += array1[row].length;
答案 3 :(得分:0)
您正在外部循环中增加num。您需要在内部循环中增加它,以使其按预期工作:
public static double getAverage(double[][] array1)
{
double total = 0; //Accumulator
int num = 0;
for(int row = 0; row < array1.length; row++)
{
for(int col =0; col < array1[row].length; col++) {
total += array1 [row][col];
num += 1;
}
}
return total / num;
}
一个建议-仅默认在括号中插入括号!为了在程序中保存几行代码而冒着错误的风险是没有意义的。