染色体包含许多以不同方式产生的分数。compareTo 方法实际上测试方法的一致性并相应地返回结果。
返回 1:comp = -5..-1
返回 0:comp = 0(可能发生在不同的情况下,其中一种情况是所有分数都相等。
返回 -1:comp = 1..5
public int compareTo(Chromosome o) {
if(o == null)
return(1);
int comp = 0;
comp += Double.compare(getScore(1),o.getScore(1));
comp += Double.compare(getScore(2),o.getScore(2));
comp += Double.compare(getScore(3),o.getScore(3));
comp += Double.compare(getScore(5),o.getScore(5));
comp += Double.compare(getScore(7),o.getScore(7));
if(comp == 0)
return(0);
if(comp > 0)
return(1);
else
return(-1);
}
我的问题是,如何使这种情况遵守合同为比较器规定的规则。显然它没有,我不断得到:java.lang.IllegalArgumentException:比较方法违反了它的一般合同!