2013-03-14 3 views
0

У меня есть двумерная двойная массив, и я хочу сортировать ее на основе второго столбца. Я написал этот код, но я получил эту ошибку в последней строке: «double не может быть разыменован». Кажется, он работает со строкой, но не с массивом. любая помощь оценивается.Сортировка 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

Я полагаю, вы забыли, в код, который вы написали, чтобы переключиться обратно в два раза в вашем компаратора ... (я имею в виду, как вы сказали, что вы пытались с String, и он работал, я полагаю, что именно поэтому там остается какой-то странной String [], которая явно не должна быть там)

Если я предполагаю, что я должен прочитать double [] row1 = (double []) o1, тогда проблема в том, что вы не можете позвонить .compareTo на двойной , Вы должны просто вычитать значения.

+0

Я вижу, что вы отредактировали, чтобы вернуться к двойному [], поэтому это означает, что я правильно понял. Как я уже сказал, верните row1 [columnToSort] - row2 [columnToSort] – Steph

+0

Да, вы абсолютно правы. :) – MTT

Смежные вопросы