2017-12-13 9 views
0

전체 배열을 가져 와서 수정할 필요없이 메서드에서 2D 배열의 열을 변경하는 방법이 있는지 궁금합니다.2 차원 배열의 열을 1D 배열 인 것처럼 변경하십시오.

public static void main(String[] args){ 
    int[][] a = {{1,2,3},{4,5,6},{7,8,9}}; 
    int[] b = reverse(new int[]{1,2,3}); 
    System.out.println(Arrays.toString(b)); 
    System.out.println(Arrays.deepToString(a)); 
    System.out.println(Arrays.toString(new int[]{a[0][0],a[1][0],a[2][0]})); 
    System.out.println(Arrays.deepToString(a)); 
} 
public static int[] reverse(int[] start) 
{ 
    int[] result = new int[start.length]; 
    int x = 0; 
    for(int i= start.length-1; i >= 0; i --) 
    { 
     result[i] = start[x]; 
     x ++; 
    } 
    return result; 
} 

현재는 입력 된 번호를 반대하지만, a[0][0], a[1][0]a[2][0]의 위치를 ​​수정하지 않습니다. 원본 배열은 동일하게 유지되지만 생성 된 새 배열은 수정됩니다. 어떻게 해결할 수 있을까요?

답변

0

먼저 내부 자식 배열을 정렬 한 다음 외부 부모 배열을 정렬하여이 작업을 수행 할 수 있습니다.

//Array for testing 
    int[][] a = {{1,2,3},{4,5,6},{7,8,9}}; 
    System.out.println(Arrays.deepToString(a)); 

    //loop through inner array only and reverse items 
    for (int i = 0; i < a.length; i++){ 
     a[i] = reverse(a[i]); 
    } 
    System.out.println(Arrays.deepToString(a)); 

    //loop through outer array only and reverse parents. 
    //Note that this only needs to goe through half the array that is why we use "a.length/2". 
    for (int i = 0; i < a.length/2; i++){ 
     int[] temp = a[i]; 
     a[i] = a[a.length - i - 1]; 
     a[a.length - i - 1] = temp; 
    } 
    System.out.println(Arrays.deepToString(a)); 

출력 :

더 잘 설명하지 않는
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
    [[3, 2, 1], [6, 5, 4], [9, 8, 7]] 
    [[9, 8, 7], [6, 5, 4], [3, 2, 1]] 
+0

죄송합니다. 기본적으로 나는 입력 한 위치를 가져 와서 그 위치를 뒤집을 수 있기를 원합니다. 예를 들어 a [0] [0], a [1] [1], a [2] [2]를 가져 와서 반대로 전체 배열을 [[1,2,3], [4,5, 6], [7,8,9]] ~ [[7,2,3], [4,5,6], [1,8,9]] – blake

+0

@blake 나는 내 대답을 업데이트했다. – sorifiend