- 从函数中返回一个
double[]
而不是一个 double
。
- 由于数字是
double
类型,因此 sum
的类型应该是 double
。
如果所有行的长度相等:
- 由于您想要添加每个列的值,所以应将
matrix[j][i]
(而不是 matrix[i][j]
)加到 sum
上,并相应地,average[i]
将是 sum / matrix.length
。
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
double[][] nums = { { 10, 15, 20 }, { 1, 2, 3 }, { 5, 10, 15 } };
System.out.println(Arrays.toString(averageColumns(nums)));
}
static double[] averageColumns(double matrix[][]) {
int i, j;
double[] average = new double[matrix.length];
for (i = 0; i < matrix.length; i++) {
double sum = 0;
for (j = 0; j < matrix[i].length; j++) {
sum += matrix[j][i];
}
average[i] = sum / matrix.length;
}
return average;
}
}
输出:
[5.333333333333333, 9.0, 12.666666666666666]
如果行的长度不同:
- 您应该首先找到最大行长度,这将成为
double[] average
的大小。
- 最后,使用两层嵌套循环计算
average[]
的值。外部循环将运行到average.length
,内部循环将运行到行数。在处理每列时,使用计数器(例如int count
)跟踪添加到sum
中的值的数量。在内部循环结束时,average[i] = sum / count
。
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
double[][] nums = { { 10, 15, 20 }, { 1, 2 }, { 5, 10, 15, 25 } };
System.out.println(Arrays.toString(averageColumns(nums)));
}
static double[] averageColumns(double matrix[][]) {
int max = matrix[0].length;
for (int i = 0; i < matrix.length; i++) {
if (matrix[i].length > max) {
max = matrix[i].length;
}
}
int i, j;
double[] average = new double[max];
for (i = 0; i < average.length; i++) {
double sum = 0;
int count = 0;
for (j = 0; j < matrix.length; j++) {
if (matrix[j].length - 1 >= i) {
sum += matrix[j][i];
count++;
}
}
average[i] = sum / count;
}
return average;
}
}
输出:
[5.333333333333333, 9.0, 17.5, 25.0]