【问题标题】:How do I calculate average for 2D array?如何计算二维数组的平均值?
【发布时间】:2021-03-04 00:29:18
【问题描述】:

我想知道二维数组的平均值计算是否与一维数组相同?我也可以看到它的java代码吗?这就是我所拥有的,但我没有得到正确的答案。

static int avgRecursion(int a[][], int i, int j, int f) {
    // Last element
    if (i == f - 1)
        return a[i][j];

    // When index is 0, divide sum computed so far by n.
    if (i == 0)
        return ((a[i][j] + avgRecursion(a, i + 1, j, f)) / f);

    // Compute sum
    return (a[i][j] + avgRecursion(a, i + 1, j, f));
}

static int[][] array;

static {
    array = new int[3][4];

    System.out.println("Enter 12 numbers: ");
    Scanner scan = new Scanner(System.in);

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            array[i][j] = scan.nextInt();
        }
    }
    int f = array.length;
    int average = avgRecursion(array, 0, 0, f);
    System.out.println("The average of the 2D array: " + average);
}

【问题讨论】:

  • 你能举个例子吗?我不确定您要的是什么,因为“二维数组的平均值”并没有多大意义。 average 函数接受一些整数集合并返回单个值。但是,您可以获得 flattened 2D 数组的平均值,或沿其中一个维度获取多个平均值,返回一个 1D 平均值数组。无论如何,我们需要更多的澄清;示例会有所帮助。

标签: java arrays multidimensional-array average


【解决方案1】:

我猜你想找到存储在二维数组中的所有值的平均值。这是一个小程序:

public static void main(String[] args) {
    int[][] arr = new int[4][5];
    int sum = 0;
    // Length * Breadth gives total number of elements in array
    int arrLength = (arr.length * arr[0].length);

    // Populate array
    // Your program gets the values from the user
    // but i'm hardcoding them. Hope you get the point
    for (int row = 0; row < arr.length; row++) {
        for (int col = 0; col < arr[row].length; col++) {
            arr[row][col] = 20;
        }
    }

    // Actual answer starts here
    // Calculate sum of all values stored in the array
    for (int row = 0; row < arr.length; row++) {
        for (int col = 0; col < arr[row].length; col++) {
            sum += arr[row][col];
        }
    }

    // Print total sum / length of array
    System.out.print("The average of the 2D array is " + sum / arrLength);
}

【讨论】:

  • 是的,正是……递归不是必需的,只需两个嵌套循环。
  • 我被要求使用递归。是否可以显示一个代码示例?
  • 二维数组没有什么能让递归变得更好。如果您正在练习教授递归,则可以用递归函数替换每个循环(在这种情况下,第二个“循环”将在第一个递归函数中)。
【解决方案2】:

您可以将二维数组展平为一维,并照常取一维数组的平均值:

int[][] arr = {{1, 2, 3, 4, 5}, {6, 7, 8}, {9}};

double avg = Arrays.stream(arr)
        .flatMapToInt(Arrays::stream)
        .average()
        .orElse(Double.NaN);

System.out.println(avg); // 5.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多