java: 2D-Array与更多的行比列返回:ArrayIndexOutOfBoundsException: 6



我有一个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++)

看起来很奇怪。它能编译吗?

你在循环中交换索引rc !

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变量

相关内容

  • 没有找到相关文章

最新更新