这是我的对象类。这里没有错误。
public class AStarNode implements Comparable<AStarNode> {
AStarNode pathParent;
int x;
int y;
int costFromStart;
int estimatedCostToGoal;
public int getCost() {
return costFromStart + estimatedCostToGoal;
}
@Override
public int compareTo(AStarNode node) {
int otherValue = node.getCost();
int thisValue = this.getCost();
if(thisValue-otherValue > 0) {
return 1;
}
else {
return 0;
}
}
}
这是我的 AStarSearch 类(class)中的一些内容。我在这里遇到错误,但我不知道如何修复它们。过去一个小时我一直在尝试一些东西。我想做的是为 PriorityList 提供一种特殊的方法,该方法根据对象变量之一将对象添加到 PriorityList 中的某个位置。谁能指出我哪里出错了?
public class PriorityList extends LinkedList {
public void add(Comparable node) {
for (int i=0; i<size(); i++) {
if(node.compareTo(node) == 0) {
add(i, node);
return;
}
}
addLast(node);
}
}
最佳答案
您的实现违反了 Comparable 的契约(Contract)。
假设 A 的值为 2,B 的值为 1。
如果比较 A 和 B,则会得到 2 - 1 > 0,因此会返回 1,这意味着 A 大于 B。
如果将 B 与 A 进行比较,则会得到 1 - 2 < 0,因此将返回 0,这意味着 A 等于 B。
鉴于此错误,任何依赖比较器的算法都将导致不确定的行为。
关于java - 如何使用 Comparable 对对象的优先级列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26535541/