我有一个2D-Array,它的行比列多。在这个数组中,我将一列中的所有值逐行求和,并返回结果。
在此之前一切正常,但在最后一个for循环之后,我得到了
Exception: java.lang.ArrayIndexOutOfBoundsException: 6
从其他线程我只得到消息,这意味着行和列的数量是不均匀的。不幸的是,在我的情况下,这需要成为一个选项。
见下面的代码:
double max = 0;
int machine = 0;
for(int c = 0; c < excelMatrix.length-1; c++){
double sum = 0;
for(int r = 0; excelMatrix.length-1; r++){
sum += excelMatrix[r][c];
}
if(max < sum){
max = sum;
machine = c;
}
}
代码一直工作到末尾,但是在r的最后一个for循环之后返回Exception。
通常当你循环遍历2D数组时,你会使用以下代码:
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println(array[i][j]);
}
}
作为二维数组只是数组的数组,每个数组可以有不同的大小。你的情况
for(int r = 0; excelMatrix.length-1; r++)
看起来很奇怪。它能编译吗?
你在循环中交换索引r
和c
!
sum += excelMatrix[c][r];
正确的代码应该是:
double max = 0;
int machine = 0;
for(int c = 0; c < excelMatrix.length; c++){
double sum = 0;
for(int r = 0; excelMatrix[c].length; r++){
sum += excelMatrix[c][r];
}
if(max < sum){
max = sum;
machine = c;
}
}
正确的代码应该是:
double max = 0;
int machine = 0;
int excelMatrix[][] =new int[][]{{1,2,3},{4,5,6}};
//System.out.println(excelMatrix.length);
//System.out.println(excelMatrix[0].length);
for(int c = 0; c <= excelMatrix[0].length-1; c++){
double sum = 0;
for(int r = 0; r<=excelMatrix.length-1; r++){
sum += excelMatrix[r][c];
}
if(max < sum){
max = sum;
machine = c;
}
}
System.out.println(max);
以上代码将计算所有列的sum并将所有列的sum的最大值存储到max
变量