如何获得2D数组的平均值

时间:2019-10-04 17:43:35

标签: java

我有一个当前方法,该方法应该显示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;
}

4 个答案:

答案 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;
    }

一个建议-仅默认在括号中插入括号!为了在程序中保存几行代码而冒着错误的风险是没有意义的。