我得到這個錯誤:當我試圖在Java中運行這個比較對我的實體系統Java的比較拋出非法參數異常
Exception in thread "Thread-3" java.lang.IllegalArgumentException: Comparison method violates its general contract!
:
private Comparator<Entity> spriteSorter = new Comparator<Entity>() {
public int compare(Entity e0, Entity e1) {
if (e1.position.getX() <= e0.position.getX())
return +1;
if (e1.position.getY() >= e0.position.getY())
return -1;
return 0;
}
};
下面是執行:
private void sortAndRender(Bitmap b, Vec2 offset, ArrayList<Entity> l) {
Collections.sort(l, spriteSorter);
for (int i = 0; i < l.size(); i++) {
l.get(i).render(b, offset);
}
}
這個問題只在我在屏幕上顯示大量實體時才真正開始發生。這裏發生了什麼?
大於/小於符號不正確,您的比較函數永遠不會返回零 – 2013-03-09 17:54:28
您沒有實現equals(Object)方法。 – shuangwhywhy 2013-03-09 17:55:06
@shuangwhywhy這與'equals'無關。 – 2013-03-09 17:56:19