我需要能够从他们的整体健康分数中重新排列一群人。我可以用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
有什么建议吗?
答案 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情况。
当o
为null
时,您的方法会抛出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());