java:2D-Array包含更多行而不是列返回:ArrayIndexOutOfBoundsException:6

时间:2016-08-30 10:35:10

标签: java arrays multidimensional-array

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

2 个答案:

答案 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变量。