2013-03-14 103 views
0

我有一個2維雙精度數組,我想根據第二列對它進行排序。我寫了這段代碼,但是在最後一行中出現了這個錯誤,「double不能被解除引用」。它似乎適用於字符串,但不適用於數組。任何幫助讚賞。對二維數組排序

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 2013-03-14 23:37:07

回答

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 [],顯然不應該在那裏)

如果我假設我應該讀取double [] row1 =(double [])o1,那麼問題是你不能在雙精度上調用.compareTo 。你應該減去這些值。

+0

我看到你編輯切換回double [],所以這意味着我猜對了。正如我所說的只是返回row1 [columnToSort] - row2 [columnToSort] – Steph 2013-03-14 23:49:42

+0

是的,你是絕對正確的。 :) – MTT 2013-03-15 15:06:14