带有双值的Java CompareTO

时间:2014-03-14 12:29:17

标签: java

我需要能够从他们的整体健康分数中重新排列一群人。我可以用int来做一个compareTO方法,但是只要它有双打,我就会错误地飞到各处。

public double compareTo(FitnessScore o){
    return (this.overall-o.overall);
}

它需要是双倍的,因为有得分如下:

68.5 68.4 60.1 60.3

因此将它们转换为int会使它变得多余。当我确实把它作为一个int来看它是否会起作用。我尝试了以下内容。 (主题是我初始化以容纳所有不同人群的数组)

Arrays.sort(subjects);

我收到以下错误:

java.lang.NullPointerExceptione

有什么建议吗?

6 个答案:

答案 0 :(得分:11)

compareTo您的int必须返回overall值。

-1 用于将其放在收藏中 0 表示收集中已存在相同的值 +1 ,以便在之后将其放入收藏

如果Double的类型为public int compareTo(FitnessScore o){ return this.overall.compareTo(o.overall)); } ,请使用此项:

overall

如果double的类型为public int compareTo(FitnessScore o){ if(this.overall<o.overall) return -1; else if(o.overall<this.overall) return 1; return 0; } ,请使用此项:

NullPointerException

对于subjects,请检查您的{{1}}是否为空。

答案 1 :(得分:4)

您正在打破compareTo方法的签名。     它应该如下所示,

public int compareTo(FitnessScore o){
    return Double.compare(this.overall-o.overall);
}

答案 2 :(得分:1)

您需要实现Comparator接口。不要担心你的价值观。即使compare方法返回int。这个int不是你的值之一。

同时检查一下。 Comparator with double type

答案 3 :(得分:0)

您的compareTo()方法会收到FitnessScore个对象。但是,它不测试null情况。

onull时,您的方法会抛出NullPointerException

答案 4 :(得分:0)

你可以试试这个。

Double obj1 = this.overall;
Double obj2 = o.overall;

int retval =  obj1.compareTo(obj2);

//然后执行你正常的if else阻止。

答案 5 :(得分:0)

您应该实现Comparator界面:

class OFSComparator implements Comparator<Member> {
   public int compare(Member m1, Member m2) {
      return (m1.ofs.compareTo(m2.ofs));
   }
}

每个成员都应该有一个总体健康评分字段

Double ofs;

如果您以后想根据整体健康评分对成员进行排序,可以使用Arrays.sort

Arrays.sort(members, new OFSComparator());