任务是将一个二维数组转换为一个简单的数组,我尝试通过for循环将原始数组的元素复制到新数组,例如
public static void main(String[] args) {
int[][] a = new int[5][8];
//initialize the 2-dimensional array with random number range(1~100)
assignNestedArray(a);
printNestedArray(a);
int[] arr=new int[a.length*a[0].length];
for(int i=0,k=0;i<a.length;++i,k+=a[i].length){
System.arraycopy(a[i], 0, arr, k, a[i].length);
}
System.out.println(Arrays.toString(arr));
}
public static void printNestedArray(int[][] a){
for (int[] sub_arr : a) {
for (int v : sub_arr)
System.out.print(v+" ");
System.out.println();
}
}
public static void assignNestedArray(int[][] a){
for (int i = 0; i < a.length; ++i)
for (int j = 0; j < a[i].length; ++j)
a[i][j] = (int) (Math.random() * 100);
}
另一方面,如果我像这样修改数组复制代码:
for(int i=0,k=0;i<a.length;++i){
System.arraycopy(a[i], 0, arr, k, a[i].length);
k+=a[i].length;
}
效果很好,我想知道这两个代码之间有什么区别,以及如何编写每次更新2个元素的for循环。 任何建议都表示赞赏,谢谢。
答案 0 :(得分:1)
修改你的循环。你正在增加&#34;我&#34;首先,然后递增k,所以当i == 4时,它再次递增i,这将是5,你将访问[5],这将抛出ArrayIndexOutOfBoundsException。
for (int i = 0, k = 0; i < a.length; k += a[i].length,++i) {
System.arraycopy(a[i], 0, arr, k, a[i].length);
}