2012-11-25 47 views
7

tôi vẫn chưa một câu hỏi Java :)Sao chép hai mảng hai chiều khác mảng hai chiều Java

Tôi đã đọc this chủ đề, nơi nó giải thích rõ ràng, nhưng tôi có hai mảng hai chiều mà tôi muốn sao chép.

Tôi hiểu rằng đoạn mã này

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

Nhưng câu hỏi của tôi là, làm thế nào để kết hợp nó với hai mảng nơi

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

đâu c1 là sự kết hợp của các mảng nói trên?

+3

Chỉ cần sử dụng 'for' loop và sử dụng' arraycopy' bên trong nó. Bạn đã thử chúng chưa? –

+0

tưởng tượng thứ nguyên thứ hai của mảng của bạn là mảng một chiều mà bạn muốn kết hợp. Vì vậy, lặp qua kích thước đầu tiên và làm những thứ mà bạn đã tìm thấy với chiều thứ hai. – timaschew

+0

Vì có hai chiều, không rõ ràng nên sáp nhập như thế nào. Một ví dụ sẽ là tốt. –

Trả lời

3

Sử dụng giải pháp từ task, mà Ngài đã đề cập trong câu hỏi. Ví dụ:

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

Prints:

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

EDIT
thực hiện đối với bất kỳ số lượng đối số (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; 
    } 
} 

Prints:

[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

Đây chính xác là những gì tôi cần .... Chỉnh sửa: Nhưng tại sao phải chuỗi btw ??? Dòng này: System.out.println (Arrays.toString (mảng)); –

+0

Nếu tôi không sử dụng phương pháp "Arrays.toString", thì ứng dụng có thể in ra như sau: [I @ 63e68a2b [I @ 3479404a [I @ 46bd530. Tài liệu: "Trả về biểu diễn chuỗi nội dung của mảng được chỉ định. Biểu diễn chuỗi bao gồm danh sách các phần tử của mảng, được đặt trong dấu ngoặc vuông (" [] ") ..." Không có nó Bạn chỉ có thể xem tham chiếu đến một mảng. Nếu câu trả lời này là OK cho Bạn, vui lòng đánh dấu nó là "câu trả lời được chấp nhận". –

+0

Cảm ơn bạn. Nó cũng có tác dụng.Tôi sẽ cố gắng và con số của bạn ra để in 9 mảng 3x3 mỗi. Điều này là tôi đang làm một Sudoku và cần mỗi mảng bị cô lập như tôi phải kiểm tra đó là tổng cho mỗi mảng, xem nếu họ phù hợp hay không. –

1

Điều gì đó như thế này sẽ hoạt động hoàn hảo?

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

Và bằng cách này, tôi cho rằng từ kích thước của bạn mà c trông giống như:

[ a, a, a, , , ] 
[ a, a, a, , b, ] 
[ a, a, a, , , ] 
Các vấn đề liên quan