2011-10-26 11 views
0

私は次元がmyArray[x][3]である2次元配列を持っています。私は[x][0]に基づいて配列をソートする必要があります。私はArrays.sort(myArray);を使っていました。しかし、当時の配列はmyArray[x]の1次元配列でした。それから私は自分の考えを変え、それを2次元の配列に変えました。これは1から9までの整数で埋められています。私は2次元配列をソートする明確な方法を探しており、簡単な説明を見つけることはできません。助けてください。単純な整数2次元配列をソートするにはどうすればよいですか?

ありがとうございます。 アイス

[OK]を、ここではコードです:

public static void sortArray(int myArray[][]){ 
Arrays.sort(myArray, new Comparator<Integer[]>(){ 
    @Override 
    public int compare(Integer[] o1, Integer[] o2) { 
     return o1[0].compareTo(o2[0]); 
    } 
}); 

は、その仕事をしましたか?

OK、ここに問題があります。ソートされた配列は、このように、ソートされていないアウト開始:

3 - 0 - 0 
4 - 0 - 1 
5 - 0 - 2 
6 - 0 - 3 
3 - 0 - 4 

最初の列[0][x]値であり、第二カラム[1][x]アレイフィールド数であり、そして最後の列[2][x]は、アレイ内の実際の列数です。全体的な方法は、元の2次元配列から1行全体を取り出し、3列x幅の配列にロードした後、[0][x]列に基づいて配列をソートします。ここでは、ソート機能は、現在呼び出された後の結果である:ソートは間違っているよう

どういうわけか
0 - 0 - 3 
0 - 1 - 4 
0 - 2 - 5 
0 - 3 - 6 
0 - 4 - 3 

が、私はコピーして貼り付け方法は、数字をスワップアウトされ、そうです。同じSystem.out.printが両方の出力で使用されています。

+0

全体の2次元配列をソートするか、配列の各行を個別にソートしますか? – birryree

+0

あなたは、配列の列を賢明に並べ替えることを意味しますか? – rohit89

+0

列を結合したままにして、列0に基づいて並べ替える必要があります。最初の列には値が入り、2番目の列には基本的にx座標が含まれ、3番目の列には基本的にyの値が含まれています。最初の列は、最小から最大までソートする必要があります。 – IceRegent

答えて

3

すると、私は右のそれを得た場合:

Integer[][] numbers = new Integer[][]{{7, 8, 9}, {1, 2, 3}}; 
    System.out.println("Before:"); 
    for(Integer[] row : numbers) { 
     for(Integer num : row) { 
      System.out.print(num); 
     } 
     System.out.println(""); 
    } 

    Arrays.sort(numbers, new Comparator<Integer[]>(){ 
     @Override 
     public int compare(Integer[] o1, Integer[] o2) { 
      return o1[0].compareTo(o2[0]); 
     } 
    }); 
    System.out.println("After:"); 
    for(Integer[] row : numbers) { 
     for(Integer num : row) { 
      System.out.print(num); 
     } 
     System.out.println(""); 
    } 

プリント:

 
Before: 
789 
123 
After: 
123 
789 

更新:

これを正確に何が必要。

public static void sortArray(int myArray[][]) { 
    Arrays.sort(myArray, new Comparator<int[]>() { 

     @Override 
     public int compare(int[] o1, int[] o2) { 
      return Integer.valueOf(o1[0]).compareTo(Integer.valueOf(o2[0])); 
     } 

    }); 
} 

アップデート2:各列をソート

public static void sortEachRow(int myArray[][]) { 
    for(int[] row : myArray) { 
     Arrays.sort(row); 
    } 
} 
+0

ここに私がメソッドに配置したものがありますので、それを呼び出すことで動作させることができます。 'code'' public static void sortArray INT myarrayの[] []){ は、Arrays.sort(数字、新しいコンパレータ(){ @Override公共INT比較(整数[] O1、整数[] O 2){ 戻りO1 [0] .compareTo(O2 [0]); } }); は} '私は投稿元の形式のようなことを投稿方法OK – IceRegent

+0

をcode' – IceRegent

+0

@IceRegent:?。メソッドを使用して記事を更新。また、あなたが何であるかを問題に伝えるのを忘れ –

0

これは動作するはずです。

public static void main(final String[] args) 
{ 
    Integer[][] numbers = new Integer[][] {{7, 8, 9}, {1, 2, 3}}; 
    sortArray(numbers); 
    for (Integer[] s : numbers) { 
     System.out.println(s[0] + " " + s[1] + " " + s[2]); 
    } 
} 

public static void sortArray(Integer myArray[][]) 
{ 
    Arrays.sort(myArray, new Comparator<Integer[]>() 
    { 
      @Override 
      public int compare(Integer[] o1, Integer[] o2) 
      { 
        return o1[0].compareTo(o2[0]); 
      } 
    }); 
} 
+0

エラーは発生していないようですが、他のコードの中から配列を渡そうとすると、エラー状態の赤い下線が引かれます。sortArray(myArray); – IceRegent

+0

わかりません。パラメータは 'myArray'ではなく' numbers'でなければなりません。または、 'sortArray(numbers)'がエラーを出すということを意味しましたか? – rohit89

+0

いいえ、最初の部分では、配列を作成してそれを埋めて、配列の名前で表示します。私はすでに配列を作成していますが、実際は私は3つの異なる配列で作業していますが、今はそれらのうちの1つを並べ替えるだけです。並べ替える必要がある配列の名前はmyRowsです。ですから、sortArrayメソッドを呼び出すと、実際の配列 "myRows"を渡す必要があります。 – IceRegent

関連する問題