首页 > 解决方案 > 尝试获取二维数组的平均值时出现逻辑错误

问题描述

在这个程序中,我必须用用户输入的值填充一个二维数组并找到所有数组元素的平均值。但是,该程序通过将总和除以行数而不是数字数来找到平均值。我尝试将平均值设置为 2D 数组本身,但它只识别一个引用而不是两个引用。哈尔普

public static void main(String[] args) {
    int[][] array = createArray();

    System.out.printf("The average of this array is " + "%.2f", average(array));
}

public static int[][] createArray() {
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter the number of rows: ");
    int numRows = sc.nextInt();
    System.out.print("Enter the number of columns: ");
    int numColumns = sc.nextInt();

    int[][] array = new int[numRows][numColumns];

    System.out.println("Enter " + array.length + " rows and " + array[0].length + " columns");

    for (int row = 0; row < array.length; row++)
        for (int column = 0; column < array[0].length; column++)
            array[row][column] = sc.nextInt();
    return array;
}

public static double average(int[][] a) {
    int sum = 0;
    double average = 0;
    for (int row = 0; row < a.length; row++) {
        for (int column = 0; column < a[row].length; column++) {
            sum += a[row][column];
        }
            average = sum / a.length; 
    }

    return average;
}

}

标签: javamultidimensional-array

解决方案


问题在这里:

for (int row = 0; row < a.length; row++) {
    for (int column = 0; column < a[row].length; column++) {
        sum += a[row][column];
    }
        average = sum / a.length; 
}

问题是您在循环的每次迭代中都重新分配 average。相反,您应该在所有循环完成后计算它:

for (int row = 0; row < a.length; row++) {
    for (int column = 0; column < a[row].length; column++) {
        sum += a[row][column];
    }
}

average = (double) sum / (a.length * a[0].length); 

该产品(a.length * a[0].length)将为您提供数组中所有数组的大小。您(double)在计算平均值时添加强制转换以避免整数算术问题(例如25/6is 4)。

请注意,如果数组足够大,则可能sum会溢出。


推荐阅读