2010-03-31 204 views
2

我想知道什麼是將二維數組從臨時數組複製到原始數組的正確方法。 數組大小在程序開始時未知,用戶稍後設置它。 下面的代碼:如何在java中將二維數組從一個複製到另一個

私有靜態無效copy_Matrix(INT origin_Matrix [] [],INT copy_Matrix [] [],詮釋行,詮釋 列)

{

 for (int i = 0 ; i < row-1; ++i) 
     { 
      for (int j = 0; j < column; j++) 
      { 
       origin_Matrix[i][j] = copy_Matrix[i][j]; 

      } 
     } 

}

我知道這是錯的,請幫助..

+0

i i 2010-03-31 16:49:48

回答

3

Java中不需要前綴增量。此外,您不需要在Java中傳遞行數和列數(這隻會留下錯誤空間)。並且,存在一個函數System.arraycopy,它應該至少與一次一個拷貝它們一樣有效,如果不是更多的話。

private static void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][]) 
{ 
    /* assert origin_Matrix.length == copy_Matrix.length */ 
    for (int i = 0 ; i < origin_Matrix.length; i++) 
    { 
     /* assert origin_Matrix[i].length == copy_Matrix[i].length */ 
     System.arraycopy(origin_Matrix[i], 0, copy_Matrix[i], 0, origin_Matrix[i].length); 
    } 
} 

請注意,您應該知道Java集合(如List/ArrayList的或Vector),並有意識地決定整數數組的輕微性能提升你的情況需要,在額外的可讀性和方便收藏提供。

1

你有沒有原因使用這個而不是Java Collections?如果不是,我會使用這些。他們進行了優化,並提供了一個相當強大的API進行操作。

+0

完全同意。 – 2010-03-31 16:53:51

+0

int數組在特定操作中佔有一席之地。例如,當做瘋狂的項目歐拉問題時,我使用Vector來代替數組,因爲它更容易,我認爲它已經過優化,不會造成太大的變化;在被速度感到失望之後,我切換到int數組,這是一個巨大的差異。不過,我同意Edan應該知道Java集合,並有意識地決定一系列整數更好。在這種情況下,他似乎只是簡單地從C/C++移植代碼,如前綴運算符和行col參數所示。 – Ricket 2010-03-31 16:56:51

2

你最好的東西,如結尾:

private static int[][] copy_Matrix(int origin_Matrix[][]) 
{ 
    int copy[][] = new int[origin_Matrix.length][origin_Matrix[0].length]; 
    for (int i = 0 ; i < origin_Matrix.length; ++i) 
    { 
     System.arraycopy(origin_Matrix[i], 0, copy[i], 0, origin_Matrix[i].length); 
    } 
    return copy; 
} 
0

@Eden

的代碼是不完美的;你爲什麼要做一個i < row-1

首先檢查循環?我想你應該做i < row檢查而不是

而且,你不需要明確地傳遞大小。 您可以使用數組上的.length字段來獲取它們的大小。