2013-03-11 46 views
0

我想整型的二维数组复制到另一个,这样,原来当复制的数组被修改修改Java中的复制二维数组

  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

已经回答的问题 - http://stackoverflow.com/questions/6101684/system-arraycopy-question – Joe2013 2013-03-11 08:40:46

+0

已经回答了。 http://stackoverflow.com/questions/6101684/system-arraycopy-question – Joe2013 2013-03-11 08:42:13

回答

1

你只是应付到新阵列T4一维数组引用。这就是为什么你的参考t4仍然指向你的旧1D阵列。

您应该使用一个循环来替代“更深”的阵列:

for (int i = 0; i < t3.length; i++) { 
    System.arraycopy(t3[i], 0, t4[i], 0, t3[0].length); 
} 
1
for(int i = 0; i < t3.length; i++) 
    t4[i] = t3[i].clone(); 

试试这个:

1

你需要复制你的2D阵列的每个阵列。

使用Arrays.copyOf(int[], int)

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

然后你将保持原始未修改的,因为你需要

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 
     } 
+0

为什么'.length - 1'for循环? – damon 2013-03-12 03:15:56