gpt4 book ai didi

java - 二维数组中列的总和

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:02 26 4
gpt4 key购买 nike

static double [][] initialArray = {{7.432, 8.541, 23.398, 3.981}, {721.859, 6.9211, 29.7505, 53.6483}, {87.901, 455.72, 91.567, 57.988}};

public double[] columnSum(double [][] array){
int index = 0;
double temp[] = new double[array[index].length];

for (int i = 0; i < array[i].length; i++){
double sum = 0;

for (int j = 0; j < array.length; j++){
sum += array[j][i];

}
temp[index] = sum;
System.out.println("Index is: " + index + " Sum is: "+sum);
index++;

}

return temp;
}


public static void main(String[] args) {
arrayq test = new arrayq();
test.columnSum(initialArray);

}

我想获取所有列的总和,但我一直收到越界异常。这是我得到的输出:

Index is: 0 Sum is: 817.192
Index is: 1 Sum is: 471.18210000000005
Index is: 2 Sum is: 144.7155
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at NewExam.arrayq.columnSum(arrayq.java:11)

最佳答案

您的外部 for 循环条件给您带来了问题。这是你的循环:-

for (int i = 0; i < array[i].length; i++)

现在,当 i 达到值 3 时,您正在尝试访问 array[3].length。这将抛出 IndexOutOfBounds 异常。


由于每个内部数组的大小都相同,您可以将循环更改为:-

for (int i = 0; i < array[0].length; i++)

或者,更好的是,只需预先将 array[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] 中。这样您就不必使用令人困惑的迭代。所以,只需将上面的代码添加到您的方法中,并删除旧的。

此方法也可以正常工作,即使您有 jagged-array,即,您的内部数组大小不同。但请记住仔细定义 temp 数组的大小。

另请注意,我使用了 Arrays.toString(temp) 方法来打印数组。

关于java - 二维数组中列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14302971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com