2013-03-14 3 views
0

2 차원 배열이 두 번째 열을 기준으로 정렬하고 싶습니다. 이 코드를 작성했지만 마지막 줄에서이 오류가 발생합니다. "이중을 역 참조 할 수 없습니다." 그것은 문자열과 함께 작동하지만 어레이에 대해서는 작동하지 않는 것 같습니다. 어떤 도움을 주셔서 감사합니다.2 차원 배열 정렬

import java.util.Arrays; 
import java.util.Comparator; 

public class Sort { 
    public static void main(String args[]){ 
     //Array to sort 
     double[][] X = new double[][]{ 
       {1.2,2,1,3.1}, 
       {1,2.7,3.3}, 
       {1,2.3,3.1}, 
       {1.5,3.2,2.4}; 

     //Sort the array by column 2 
     Arrays.sort(X, new ColumnComparator(2)); 
    } 
} 


//Class that extends Comparator 
class ColumnComparator implements Comparator { 
    int columnToSort; 
    ColumnComparator(int columnToSort) { 
     this.columnToSort = columnToSort; 
    } 
//overriding compare method 
    public int compare(Object o1, Object o2) { 
     double[] row1 = (double[]) o1; 
    double[] row2 = (double[]) o2; 
    //compare the columns to sort 
    return row1[columnToSort].compareTo(row2[columnToSort]); 
} 
+0

당신 말이 맞습니다. 마지막 줄. – MTT

답변

1
public class SecondColumnComparator implements Comparator<double[]> { 
    @Override 
    public int compare(double[] row1, double[] row2) { 
     return Double.compare(row1[1], row2[1]); 
     // or, before Java 7: 
     // return Double.valueOf(row1[1]).compareTo(Double.valueOf(row2[1])); 
    }  
} 
1

난 당신이 당신이 문자열을 시도 말했듯이, 내 말은 (... 당신의 비교에 두배로 다시 전환, 당신이 쓴 코드에서, 깜빡하고 일을 가정, 그 이유가있는 가정

double [] row1 = (double []) o1을 읽어야한다고 가정하면 문제는 double에 .compareTo를 호출 할 수 없다는 것입니다. . 당신은 값들을 빼 주어야합니다.

+0

다시 두 번 []로 전환하도록 편집 한 것을 볼 수 있으므로 올바르게 추측했음을 의미합니다. 내가 말한대로 그냥 row1 [columnToSort] - row2 [columnToSort] – Steph

+0

예, 당신은 절대적으로 맞습니다. :) – MTT