gpt4 book ai didi

Java 比较器抛出非法参数异常

转载 作者:行者123 更新时间:2023-12-01 14:47:09 25 4
gpt4 key购买 nike

我收到此错误:

Exception in thread "Thread-3" java.lang.IllegalArgumentException: Comparison method violates its general contract!

当我尝试在 Java 中为我的实体系统运行此比较器时:

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);
}
}

当我在屏幕上显示大量实体时,这个问题才真正开始发生。这里发生了什么?

最佳答案

你的比较器完全错误。更好的是像

    if (e1.position.getX() != e0.position.getX())
return Integer.compare(e1.position.getX(), e0.position.getX());
if (e1.position.getY() != e0.position.getY())
return Integer.compare(e1.position.getY(), e0.position.getY());
return 0;

关于Java 比较器抛出非法参数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com