试图找到2d数组平均值的逻辑错误

时间:2018-04-26 08:24:26

标签: java

这总是输出1,我不知道为什么,我试图制作一个方法,取一个二维数组的元素的平均值。这是一个类的一部分,我从主类中调用它。

  return new ConcreteProtoType(*this);

5 个答案:

答案 0 :(得分:1)

您的代码存在多个问题。

首先,我猜内环中的j < cols应为j < a.cols

其次,最重要的是,这不是你对一组数字的平均值。

你应该首先对它们求和,然后将总数除以样本数,例如

public static double Ave(Array_two a) {
    double sum = 0; // you want to return a double
    double total = a.rows * a.cols;
    if (total == 0) return 0; // watch out for possible division by 0
    for (int i = 0; i < a.rows; i++) {
        for (int j = 0; j < a.cols; j++) {
            sum += a.values[i][j];
        }
    }
    return sum / total;
}

答案 1 :(得分:0)

你可以得到这样的平均值:

public static double Ave(Array_two a) {
    int count = a.rows * a.cols;

    if (count == 0) {
        return 0;
    }

    double total = 0;
    for (int i = 0; i < a.rows; i++) {
        for (int j = 0; j < a.cols; j++) {
            total += a.values[i][j];
        }
    }

    return total / count;
}

答案 2 :(得分:0)

正如Federico klez Culloca在评论中所说,这不是计算平均值的正确代码。您需要对for循环中的所有值求和,然后除以之后的值总数。他对于平均值需要为double(小数)的事实也是正确的,否则结果将是int(整数)。你应该尝试类似的东西:

public static double Ave(Array_two a) {
    double average = 0;
    int sum = 0;
    int total = a.rows * a.cols;
    for (int i = 0; i < a.rows; i++) {
        for (int j = 0; j < a.cols; j++) {
            sum += a.values[i][j];
        }
    }
    average = sum / total;
    return average;
}

sum += a.values[i][j];表示sum = sum + a.values[i][j];的位置 希望这可以帮助!如果您需要更多说明,请随时发表评论:)

答案 3 :(得分:0)

正如@Federicoklez已经在这里评论的那样是您的代码的问题..

1)而不是j&lt; cols应该是j&lt; a.cols

2)整数除以整数yiels整数     即 5/2 = 2而不是2.5

3)例如,如果要计算 {1,5,2,3} 的平均值    它计算为 {1 + 5 + 2 + 3} / 4 即。按项目数量划分的数字总和,但您计算的是 1/4 + 5/4 + 2/4 + 3/4 ;

现在在你的程序中实现所有这些将会产生类似的结果。

   public static double Ave(Array_two a) {

        int total = a.rows * a.cols;
        double sum=0;
        for (int i = 0; i < a.rows; i++) {
            for (int j = 0; j < cols; j++) {
                sum +=a.values[i][j];
            }
        }
        return sum/total;
  }

答案 4 :(得分:0)

    Double average = Arrays
            .stream(new double[][]{{1.2, 3.4}, {1.2, 3.4}})
            .mapToDouble(
                    row -> Arrays.stream(row).average().getAsDouble()
            )
            .average()
            .getAsDouble();

如果使用java 8