展平不均匀数组 - 超出界限异常错误

时间:2014-03-17 01:17:06

标签: java arrays concatenation multidimensional-array

我试图压扁这个数组:

int[][] arr = { {1, 2, 3},
                {4, 5},
                {6},
                null,
                {},
                {7,8}};

我可以看到它在前几个步骤中填充了新数组,但随后我得到了out of bounds异常错误。我不明白我的错误在哪里。

public static int[] concAr (int[][] arr) {
    int countels=0;
    for (int r = 0; r < arr.length; r++) {
        if (arr[r] == null|| arr[r].length==0)
            continue;
        for (int c = 0; c < arr[r].length; c++) {               
            countels++;
        }
    }
    int[] flatAr = new int[countels];
    for(int i = 0; i < countels; i ++) {
        if(arr[i]!=null) {
            for(int j = 0; j < arr[i].length; j ++) {
                flatAr[(i * arr.length) + j] = arr[i][j];
            }
        }
    }
    return flatAr;
}

2 个答案:

答案 0 :(得分:2)

以下索引是错误的,因为数组长度不同

flatAr[(i * arr.length) + j] = arr[i][j];

count设置为零后使用此选项:

flatAr[count++] = arr[i][j];

答案 1 :(得分:2)

countels是展平数组的长度,在本例中为8.然而,在第二个外循环中,您将原始的,未展平的数组索引到countels,即使您未展平数组只有6个元素。一旦超过这6个,就会出现超出范围的异常。

第二次,您仍需要按照第一次执行的方式进行迭代,并在第二组循环内增加展平数组的索引。