1
Collections.sort(cells, new Comparator<MyCell>() {
@Override
public int compare(MyCell o1, MyCell o2) {
if (o1.getX() <= o2.getX() && o1.getY() <= o2.getY()) {
return -1;
} else {
return 1;
}
}
});
這裏完整的堆棧跟蹤:比較法違反其總承包,長comparsion
Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(Unknown Source)
at java.util.TimSort.mergeAt(Unknown Source)
at java.util.TimSort.mergeCollapse(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
我知道有這樣一個很多問題,但我不明白爲什麼我的對比是錯誤的。 getX()和getY()返回一個long。那我該如何解決這個問題?
我已經在搜索它,但沒有得到答案。
在此先感謝。
我已經找到了這個答案,但我沒有得到它如何改變emy代碼,所以它會工作? – Sarajog 2013-05-06 17:13:26
這取決於X和Y做什麼。你不能改變代碼來表達這個工作。你將不得不實施另一種比較方法。問題是,如果A有X,Y爲2,3和B有1,5,這種方法會告訴我A,B A大於B,但是對於B,A,B大於A.是不一致的!考慮處理X1> X2但是Y1 <= Y2的情況,反之亦然,返回0。 – isaach1000 2013-05-06 18:09:24
好吧,謝謝,我剛剛意識到,我必須測試其他的東西,因爲這不會得到我想要的結果。 – Sarajog 2013-05-07 06:43:52