java - 尝试获取二维数组的平均值时出现逻辑错误
问题描述
在这个程序中,我必须用用户输入的值填充一个二维数组并找到所有数组元素的平均值。但是,该程序通过将总和除以行数而不是数字数来找到平均值。我尝试将平均值设置为 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;
}
}
解决方案
问题在这里:
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/6
is 4
)。
请注意,如果数组足够大,则可能sum
会溢出。
推荐阅读
- svelte - 如何使用来自 Svelte 组件的 @apply 和 @layer 指令的尾风
- python - 用两个文件的内容替换文件的一行
- css - 有没有办法使用某种字体
在顺风排版
- python - 数据的Python极坐标图排序?
- python - 如何使这段代码更高效 Python/Pyspark 循环
- google-cloud-platform - 如何列出 Google API 的所有可用版本?
- reactjs - Material-ui主题对象中如何将props传递给createTheme()
- java - Java 类
提供但需要类 - reactjs - 获取 componentDidMount 直到页面重新加载后才得到响应
- ruby-on-rails - (NoMethodError) 模型中未定义的私有方法 - Rails