2013-03-14 167 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