2012-11-25 158 views
7

我還有另一個Java的問題:)將兩張二維陣列到另一個陣列二維的Java

我已閱讀this線程,它解釋清楚,但我有兩個二維數組,我想複製。

我明白,這段代碼

int[] array1and2 = new int[array1.length + array2.length]; 
System.arraycopy(array1, 0, array1and2, 0, array1.length); 
System.arraycopy(array2, 0, array1and2, array1.length, array2.length); 

但我的問題是,我怎麼有兩個數組進行合併,其中

int a1[][] = new int [3][3]; 
int b1[][] = new int [3][3]; 
int c1[][] = new int [3][6]; 

其中C1爲上述陣列的融合?

+3

只需使用'for'循環並在其中使用'arraycopy'。你嘗試過嗎? –

+0

想象你的數組的第二維是你想要組合的一維數組。因此,循環第一維,並做你已經發現的第二維的東西。 – timaschew

+0

因爲有兩個維度,所以不清楚應該如何合併。一個例子會很好。 –

回答

3

使用的解決方案從task,你在這個問題提到。例如:

import java.util.Arrays; 

public class ArrayProgram { 

    public static void main(String[] args) { 
     int[][] array1 = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } }; 
     int[][] array2 = { { 4, 5, 6 }, { 7, 8, 9 }, { 0, 1, 2 } }; 
     int[][] result = ArrayCopier.joinSecondDimension(array1, array2); 
     for (int[] array : result) { 
      System.out.println(Arrays.toString(array)); 
     } 
    } 
} 

class ArrayCopier { 

    public static int[][] joinSecondDimension(int[][] array1, int[][] array2) { 
     int[][] array1and2 = new int[array1.length][]; 
     for (int index = 0; index < array1.length; index++) { 
      array1and2[index] = join(array1[index], array2[index]); 
     } 
     return array1and2; 
    } 

    public static int[] join(int[] array1, int[] array2) { 
     int[] array1and2 = new int[array1.length + array2.length]; 
     System.arraycopy(array1, 0, array1and2, 0, array1.length); 
     System.arraycopy(array2, 0, array1and2, array1.length, array2.length); 
     return array1and2; 
    } 
} 

打印:

[1, 2, 3, 4, 5, 6] 
[1, 2, 3, 7, 8, 9] 
[1, 2, 3, 0, 1, 2] 

EDIT
實現爲任何參數的數目(Variable-Length Argument Lists):

import java.util.Arrays; 

public class ArrayProgram { 

    public static void main(String[] args) { 
     int[][] array1 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 
     int[][] array2 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 
     int[][] array3 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; 
     test(array1); 
     test(array1, array2); 
     test(array1, array2, array3); 
    } 

    private static void test(int[][]... arrays) { 
     int[][] result = ArrayCopier.joinSecondDimension(arrays); 
     for (int[] array : result) { 
      System.out.println(Arrays.toString(array)); 
     } 
     System.out.println(); 
    } 
} 

class ArrayCopier { 

    public static int[][] joinSecondDimension(int[][]... arrays) { 
     int firstArrayLength = arrays[0].length; 
     int[][] result = new int[firstArrayLength][]; 
     for (int index = 0; index < firstArrayLength; index++) { 
      result[index] = join(getSecondDimArrays(index, arrays)); 
     } 
     return result; 
    } 

    public static int[] join(int[]... arrays) { 
     int[] result = new int[getTotalLength(arrays)]; 
     int destPos = 0; 
     for (int[] array : arrays) { 
      System.arraycopy(array, 0, result, destPos, array.length); 
      destPos += array.length; 
     } 
     return result; 
    } 

    private static int getTotalLength(int[]... arrays) { 
     int length = 0; 
     for (int[] array : arrays) { 
      length += array.length; 
     } 
     return length; 
    } 

    private static int[][] getSecondDimArrays(int index, int[][]... arrays) { 
     int[][] result = new int[arrays.length][]; 
     int resultIndex = 0; 
     for (int[][] array : arrays) { 
      result[resultIndex++] = array[index]; 
     } 
     return result; 
    } 
} 

打印:

[1, 2, 3] 
[4, 5, 6] 
[7, 8, 9] 

[1, 2, 3, 1, 2, 3] 
[4, 5, 6, 4, 5, 6] 
[7, 8, 9, 7, 8, 9] 

[1, 2, 3, 1, 2, 3, 1, 2, 3] 
[4, 5, 6, 4, 5, 6, 4, 5, 6] 
[7, 8, 9, 7, 8, 9, 7, 8, 9] 
+0

這正是我需要的.... 編輯:但爲什麼要串btw ??? 此行: System.out.println(Arrays.toString(array)); –

+0

如果我沒有使用「Arrays.toString」方法,那麼應用程序可以打印這樣的輸出: [I @ 63e68a2b [I @ 3479404a [I @ 46bd530。 Documentation:「返回指定數組內容的字符串表示形式,字符串表示形式包含數組元素的列表,用方括號括起來(」[]「)...」沒有它你只能看到對數組。如果您的答案對您有好處,請將其標記爲「已接受的答案」。 –

+0

謝謝。它也起作用了。我會試着找出你的出路,打印9個3x3陣列。事情是我正在做一個數獨,並需要每個數組隔離,因爲我必須檢查它是每個數組的總和,看他們是否匹配。 –

1

像這樣的東西應該工作得很好嗎?

int a1[][] = new int [3][3]; 
int b1[][] = new int [3][3]; 
int c1[][] = new int [3][6]; 

for (int i = 0; i < a1.length; i++) { 
    System.arraycopy(a1[i], 0, c1[i], 0, a1[i].length); 
    System.arraycopy(a2[i], 0, c1[i], a1[i].length, a2[i].length); 
} 

順便說一下,我從你的尺寸是c樣子假設:

[ a, a, a, , , ] 
[ a, a, a, , b, ] 
[ a, a, a, , , ]