我一直在使用Nodes进行一个项目,对于这个项目,我们必须根据Nodes中项目所保持的优先级(0-2,其中0最高,2为最低)来排序Nodes(以降序排列) )。现在,我已经部分地工作了,因为当它实际进行交换时,它会使两个项目都相同(我只是在尝试交换项目)。例如:我将输入prio为0的Node_1,然后prio为1的Node_2,应按以下顺序进行排序:Node_2(holds prio 1) --> Node_1(holds prio 0)
那么它应该运行该方法以按以下顺序对它们进行排序:
Node_1(holds prio 0) --> Node_2(holds prio 1)
但是相反,它只是使两个节点都相同(优先级相同):
Node_1(holds prio 0) --> Node_1(holds prio 0)
无论我添加多少节点,它都保持不变。它们都转向具有最高优先级的同一节点。任何帮助都会很棒。
码:
private void sortJobs() {
Node p, q, r;
p = jobs;
q = null;
r = null;
//only runs if there is more than 1 job
while (p != null && p.next != null) {
q = p;
p = p.next;
if (q.item.getPriority() > p.item.getPriority()) {
r = q;
q.item = p.item;
p.item = r.item;
}
}
}
如果我仍在学习中,请告诉我是否有更好的方法可以做到这一点。
最佳答案
安德烈亚斯(Andreas)的回答中已经提到了这一点,但我将进一步阐述。由于这是Java,因此您的temp(在这种情况下为r)仅引用q。这就是为什么当您更改写q = p;
时,r也会完全改变。因为它们引用对象的相同实例。您需要创建一个临时项目以正确交换。正确的解决方法是将r设为item对象,然后设置p.item = r
。希望这可以帮助。