染色体包含许多以不同方式生成的分数.
compareTo方法实际上测试方法的一致性,并相应地返回结果.
返回1:comp = -5 ..- 1
return 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);
}
我的问题是,如何使这种情况符合comparator合同规定的规则.
显然不是,我不断得到:
java.lang.IllegalArgumentException:比较方法违反了它的常规约定!
解决方法:
如果要实现Comparator接口,则需要使用此方法(假设您的类与Chromosome tpye通用):
int compare(Chromosome o1, Chromosome o2)
但是,在您的情况下,似乎更合适的接口是可比较的. http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
int compareTo(Chromosome o)
通常实现Comparable,以使您的类的实例具有自然的顺序.比较器通常是您要比较的单独类,可用于为您提供几种不同类型的订购.
无论您要实现什么,都需要输入该类:
class Chromosome implements Comparable<Chromosome>
否则,参数应该是对象,而不是染色体.