[英]Flattening uneven array - Out of bounds exception error
我试图展平此数组:
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];
将count
设置为零后,请使用以下命令:
flatAr[count++] = arr[i][j];
countels
是展平数组的长度,在这种情况下为8。但是,在第二个外部循环中,即使未展平的数组只有6个元素,您仍可以在原始未展平的数组中索引直到countels
。 一旦超过了6,就会超出范围。
第二次,您仍然需要迭代第一次的方式,并在第二组循环中增加展平数组的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.