染色体には、さまざまな方法で生成された多数のスコアが含まれています。compareTo メソッドは実際にメソッドの一致をテストし、それに応じて結果を返します。
リターン 1: コンプ = -5..-1
return 0: comp = 0 (さまざまなシナリオで発生する可能性があり、そのうちの 1 つはすべてのスコアが等しい場合です。
-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: 比較メソッドが一般契約に違反しています!