我一直在使用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。希望这可以帮助。

10-06 14:11