Java 展平不均匀数组-越界异常错误

Java 展平不均匀数组-越界异常错误,java,arrays,concatenation,multidimensional-array,Java,Arrays,Concatenation,Multidimensional Array,我正在尝试展平此阵列: int[][] arr = { {1, 2, 3}, {4, 5}, {6}, null, {}, {7,8}}; 我可以看到,在前几个步骤中,它填充了新数组,但随后我得到了越界异常错误。我不明白我的错误在哪里 public static int[] concAr (int[][] arr) { int

我正在尝试展平此阵列:

int[][] arr = { {1, 2, 3},
                {4, 5},
                {6},
                null,
                {},
                {7,8}};
我可以看到,在前几个步骤中,它填充了新数组,但随后我得到了越界异常错误。我不明白我的错误在哪里

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;
}

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

flatAr[(i * arr.length) + j] = arr[i][j];
将计数设置为零后使用此选项:


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

flatAr[(i * arr.length) + j] = arr[i][j];
将计数设置为零后使用此选项:

countels是展平数组的长度,在本例中为8。但是,在第二个外部循环中,您可以通过原始的未平坦数组索引到countel,即使未平坦数组只有6个元素。一旦你通过了这6关,你就会得到越界例外

第二次到,您仍然需要以第一次的方式进行迭代,并在第二组循环中增加展平数组的索引。

countels是展平数组的长度,在本例中为8。但是,在第二个外部循环中,您可以通过原始的未平坦数组索引到countel,即使未平坦数组只有6个元素。一旦你通过了这6关,你就会得到越界例外


第二次到第二次,您仍然需要像第一次那样迭代,并在第二组循环中增加平坦数组的索引。

谢谢!这很有帮助,但我还必须在forint i=0之后添加一个null或空数组检查;i