2011-10-26 2 views
0

나는 2 차원 배열을 가지고 있는데, 크기는 myArray[x][3]입니다. [x][0]을 기반으로 배열을 정렬해야합니다. Arrays.sort(myArray);을 사용하고있었습니다. 그러나 그 당시 배열은 myArray[x]의 일차원 배열이었습니다. 그런 다음 마음을 바꾸어 2 차원 배열로 변경했습니다. 1에서 9까지의 정수로 채워집니다. 2 차원 배열을 정렬하는 명확한 방법을 찾고 간단한 설명을 찾을 수 없습니다. 도와주세요.어떻게 간단한 정수 2 차원 배열을 정렬합니까?

감사합니다. 아이스

좋아, 여기에 코드입니다 :

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

그 일을 했습니까?

좋습니다, 여기에 문제가 있습니다. 정렬 된 배열은 다음과 같이 분류되지 않은 아웃 시작 :

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

첫번째 열 [0][x]의 값이고, 두 번째 열 [1][x] 배열 필드 카운트하고, 마지막 열 [2][x] 어레이의 실제 열 번호이다. 전체 메서드는 원래의 2 차원 배열에서 전체 행을 가져 와서 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 열을 기반으로 정렬하려면 열이 함께 바인딩 된 유지해야합니다. 첫 번째 열은 값을 포함하고 두 번째 열은 기본적으로 x 좌표를 포함하고 세 번째 열은 기본적으로 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, 정수 [] O2) { 복귀 O1 [0] .compareTo (O2 ? [0]); } }) 는 }' – IceRegent

+0

확인 방법 내가 게시 원래 형식으로 – IceRegent

+0

@IceRegent가 있음을하나요 code' : 방법 게시물을 업데이트 또한, 당신은 당신이 어떤 문제를 이야기 잊어 버렸습니다. –

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 개의 다른 배열을 사용하고 있습니다 만, 지금 당장 그 중 하나를 정렬해야합니다. 정렬해야하는 배열의 이름을 myRows라고합니다. 그래서 sortArray 메서드를 호출하면 "myRows"라는 실제 배열을 전달해야합니다. – IceRegent