我有一个2D数组,其行数多于列数。在这个数组中,我总结了一列中的所有值,逐行并返回结果。
直到那里一切正常,但在最后一个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。
答案 0 :(得分:0)
通常在循环浏览2D数组时,请使用以下代码:
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.println(array[i][j]);
}
}
因为2D数组只是数组的数组,每个数组都可以有不同的大小。你的病情
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;
}
}
答案 1 :(得分:-1)
正确的代码是:
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);
以上代码将计算所有列的总和,并将所有总和的最大值存储到max
变量。