2012-11-18 75 views
1

可能重複:
java: How to split a 2d array into two 2d arrays如何將2D數組拆分爲左右數組?

所需要的是拆分此陣:

int[][] bitblock = { 
    {1,0,1,0,1,0,1,0}, 
    {1,0,1,0,1,0,1,0}, 
    {1,0,1,0,1,0,1,0}, 
    {1,0,1,0,1,0,1,0}, 
    {1,0,1,0,1,0,1,0}, 
    {1,0,1,0,1,0,1,0}, 
    {1,0,1,0,1,0,1,0}, 
    {1,0,1,0,1,0,1,0}}; 

這是一個8 * 8的陣列,我想把它分成左右陣列並將它們存儲在這裏:

int[][] leftblock = new int [bitblock.length][bitblock[0].length/2]; 
int[][] rightblock = new int [bitblock.length][bitblock[0].length/2]; 

我使用的方法Syste.arraycopy,我能夠給bitblock分裂,上下排列,我有點掙扎分裂它左,右:

System.arraycopy(bitblock, 0, leftblock, 0, leftblock.length); 
System.arraycopy(bitblock, rightblock.length, rightblock, 0, rightblock.length) 

是否有人可以幫忙嗎?謝謝

+1

希望這個幫助:http://stackoverflow.com/questions/5463781/java-how-to-split-a-2d-array-into-two-2d-arrays –

+1

你不能這樣做只有兩個'陣列拷貝,你的數據不是連續的。 – Vlad

回答

2

這應該做的伎倆很好:

int[][] bitblock = {{1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}};

int[][] leftblock = new int[bitblock.length][bitblock[0].length/2]; 
    int[][] rightblock = new int[bitblock.length][bitblock[0].length/2]; 

    for (int i = 0; i < bitblock.length; i++) { 
     for (int j = 0; j < bitblock[0].length/2; j++) { 
      leftblock[i][j] = bitblock[i][j]; 
     } 

     for (int j = bitblock[0].length/2; j < bitblock[0].length; j++) { 
      rightblock[i][j - bitblock[0].length/2] = bitblock[i][j]; 
     } 
    } 

你也可以使用System.arraycopy,因爲它使代碼備查更加清晰。 就性能而言,只要您的陣列很小,我認爲它不重要。

+0

完美謝謝:D – user1111726

1

對於8x8陣列,使用巧妙數組複製方法的可能性最小。我建議你簡單地使用嵌套for循環代碼。代碼會更簡單,你會(更快)完成工作。

+0

是的..我想如果我可以使用快捷方式做到這一點。這將是更好的編程結構,但是我會做它嵌套循環 – user1111726

0

試試這個:

for (int i = 0 ; i < bitblock.length ; i++) { 
    System.arraycopy(bitblock[i], 0, leftblock[i], 0, leftblock[i].length); 

    System.arraycopy(bitblock[i], bitblock[0].length/2, 
            rightblock[i], 0, leftblock[i].length); 
} 

我個人不認爲嵌套循環會在這種情況下更好的 - 你還不如用的System.arraycopy的功能,而不是自我重塑車輪。在我看來,這比嵌套循環更易於管理/讀取。