2017-12-13 15 views
0

メソッド内で2D配列の列を変更して配列全体を変更して変更する必要がないかどうか疑問に思っていましたか?2D配列の列を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

関連する問題