一切似乎都运行良好(几天),但我碰到一个问题只有一次,并有一个非常困难的时间来重现问题。 “Java 7 - “比较方法违反其总合约!”
”比较方法违反其总合同!“被抛出,完全让我措手不及。我有以下几点:
public class CustomComparator implements Comparator<Chromosome> {
public int compare(Chromosome c1, Chromosome c2){
return c1.compareTo(c2);
}
}
我的染色体类:
public class Chromosome implements Comparable<Chromosome>{
private double rank;
//bunch of methods...
@Override public int compareTo(Chromosome c){
final int BEFORE = -1;
final int EQUAL = 0;
final int AFTER = 1;
if (this.getRank() == c.getRank()) //getRank() simply returns a double value 'rank'
return EQUAL;
else if (this.getRank() < c.getRank())
return BEFORE;
else //i.e. (this.getRank() > c.getRank())
return AFTER;
}
我有一个ArrayList和我同时使用Collections.sort(MYLIST)和Collections.sort(MYLIST,Collections.reverseOrder()) 。到目前为止他们仍然工作得很好。我只在100次运行中遇到过这种错误。这个实现有什么问题吗?
是否有任何双值的NaN? – 2014-12-06 13:29:00
可能是'0.0/0.0'或类似的结果。 – 2014-12-06 13:30:31
你的compareTo方法可以简单地说,'return Double.compare(this.rank,c.rank);'。自定义比较器自从它在染色体实例上调用'compareTo'时就没用了。 – 2014-12-06 13:31:06