2012-11-04 94 views
0

我有一個二維數組,我只需要將第一行拷貝到另一個相同大小的數組中。這樣做的最好方法是什麼?我試過這個:Java二維數組拷貝

public static int[][] buildCME(int[][] array){ 

    int [][] arrayCME = new int[array.length][array[0].length]; 


    for(int y = 1; y < array.length; y++) 
    { 

     for (int x = 0; x < 1; x++) 
     { 

      arrayCME[y][x] = array[y][x]; 

     } 
    } 

但是,這只是給我0的第一行,我認爲必須做我的int初始化。我創建了這個for循環,因爲我認爲它比在正常for循環中創建if語句來解釋整個2D數組更容易。謝謝您的幫助!

回答

2

這是因爲你的外循環從1開始,而不是0,並且當數組從0開始時,第一行將始終保持不變。

+0

這就是我想要發生的事情,因爲它不會被更改,但是當我打印出arrayCME時,它的全部爲0表示第一行 –

+0

@Aaron的意思是,arrayCME的第一行與默認值相同 - 這全是零 - 這不是你想要的。使外環從0開始。 –

+0

啊,我現在看到了。我的道歉,謝謝亞倫! –

5

您的代碼從第二行開始(外循環從1開始)複製第一列(內循環爲x < 1)。如果你要複製的第一行做

for (int x = 0; x < array[0].length; x++) 
{ 
     arrayCME[0][x] = array[0][x]; 
} 

爲了更有效地做到這一點,你可能想看看System.arraycopy

System.arraycopy(array[0],0,arrayCME[0],0,array[0].length); 

System.arraycopy應該進行更有效的複製,因爲它是一個native方法。此外,一些JVM(例如HotSpot JVM)將此方法視爲內部。 JVM通常會將調用替換爲具有體系結構特定代碼的內在函數方法,在arraycopy的情況下可能是直接複製內存的機器代碼。