我正在尝试将一个2d的int数组复制到另一个,这样当复制的数组被修改时,原始数据不受影响
int[][] t3 = new int[][]{
{1,2,3},
{0,4,6},
{7,8,9}
};
show(t3);
int[][] t4 = new int[t3.length][t3[0].length];
System.arraycopy(t3, 0,t4 ,0, t3.length-1);
show(t4);
t3[0][0]=99;
show(t3);
show(t4);
然而,原文在这里被修改
t3
1 2 3
0 4 6
7 8 9
t4
1 2 3
0 4 6
0 0 0
t3 modified
99 2 3
0 4 6
7 8 9
t4
99 2 3
0 4 6
0 0 0
我尝试了clone(),行为仍然是相同的
这是为什么?知道如何保持原始未经修改吗?
答案 0 :(得分:1)
for(int i = 0; i < t3.length; i++)
t4[i] = t3[i].clone();
试试这个:
答案 1 :(得分:1)
您只是将1d数组引用应用于新数组t4。这就是为什么你的参考t4仍然指向旧的1d阵列。
您应该使用循环来替换“更深层”的数组:
for (int i = 0; i < t3.length; i++) {
System.arraycopy(t3[i], 0, t4[i], 0, t3[0].length);
}
答案 2 :(得分:1)
您需要复制2d数组的每个数组。
int[][] t4 = new int[t3.length][];
for(int i = 0 ; i < t3.length ; ++i) {
t4[i] = Arrays.copyOf(t3[i], t3[i].length);
}
show(t4);
答案 3 :(得分:0)
只需使用此方法
public static int[][] produceAcopy2DArray(int[][] original) {
int [][] copied = new int[original.length][];
for(int i = 0; i < original.length; i++)
copied[i] = original[i].clone();
return copied;
}
然后将其称为
t4 = produceAcopy2DArray(t3);
然后,您将根据需要保持原始未修改
答案 4 :(得分:0)
Java中的复制实用程序不会复制多维数组。您必须迭代数组并将值分配给新数组。
public static void main(String[] args) {
int[][] t3 = new int[][] { { 1, 2, 3 }, { 0, 4, 6 }, { 7, 8, 9 } };
int[][] t4 = new int[t3.length][t3[0].length];
for (int x = 0; x < t3.length - 1; x++) {
for (int y = 0; y < t3[x].length - 1; y++) {
t4[x][y] = t3[x][y];
}
}
t4[0][0] = 99;
System.out.println(t3[0][0]); //Prints 1
System.out.println(t4[0][0]); //Prints 99
}