带有双值的Java CompareTO

Sof*_*tey 3 java

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

public double compareTo(FitnessScore o){
    return (this.overall-o.overall);
}
Run Code Online (Sandbox Code Playgroud)

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

68.5 68.4 60.1 60.3
Run Code Online (Sandbox Code Playgroud)

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

Arrays.sort(subjects);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

java.lang.NullPointerExceptione
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Adi*_*tya 12

compareTo必须要回报一个int价值.

-1用于在Collection
0之前放置它表示Collection
+1中已存在相同的值,用于将其放在Collection中

如果overall是类型Double,请使用:

public int compareTo(FitnessScore o){
    return this.overall.compareTo(o.overall));
}
Run Code Online (Sandbox Code Playgroud)

如果overall是类型double,请使用:

public int compareTo(FitnessScore o){
    if(this.overall<o.overall)
          return -1;
    else if(o.overall<this.overall)
          return 1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并为您NullPointerException,检查您subjects的不是空.


小智 5

您正在破坏compareTo方法的签名。如下图所示

public int compareTo(FitnessScore o){
    return Double.compare(this.overall-o.overall);
}
Run Code Online (Sandbox Code Playgroud)