你的外部for循环条件给你带来了问题.这是你的循环: –
for (int i = 0; i < array[i].length; i++)
现在,当我达到值3时,您正在尝试访问数组[3] .length.这将抛出IndexOutOfBounds异常.
由于每个内部数组的大小相同,您可以将循环更改为: –
for (int i = 0; i < array[0].length; i++)
或者,更好的是,只需将数组[0] .length存储在某个变量中.但这不会产生太大的影响.
我还建议你使用更好的方法来计算列的总和.避免首先迭代行.保持迭代是正常的,可能是这样的: –
public double[] columnSum(double [][] array){
int size = array[0].length; // Replace it with the size of maximum length inner array
double temp[] = new double[size];
for (int i = 0; i < array.length; i++){
for (int j = 0; j < array[i].length; j++){
temp[j] += array[i][j]; // Note that, I am adding to `temp[j]`.
}
}
System.out.println(Arrays.toString(temp));
return temp; // Note you are not using this return value in the calling method
}
因此,您可以看到您的问题如何高度简化.我所做的是,不是将值赋给数组,而是将array [i] [j]的新值添加到temp [j]的现有值.因此,逐渐地,所有i(行)的array [i] [j]的值在temp [j]中求和.这样您就不必使用混乱的迭代.因此,只需将上述代码添加到您的方法中,然后删除旧代码即可.
即使您有锯齿状数组,即内部数组的大小不同,此方法也可以正常工作.但请记住要仔细定义临时数组的大小.
还要注意,我已经使用Arrays.toString(temp)方法来打印数组.