0

嘿,我有一个使用 while 循环的程序,但我真的很困惑为什么它变成了无限循环

这是我的代码

打印无效

public void print() {
    DoublyLinkedListNode current = first;
    while (current != null) {
        current.displayInfo();
        current = current.next;
    }//end while
}//end print


public DoublyLinkedListNode partition(DoublyLinkedList list,
        DoublyLinkedListNode first, DoublyLinkedListNode last) {
    DoublyLinkedListNode smallIndex = first;
    DoublyLinkedListNode index = smallIndex.next;
    DoublyLinkedListNode temp = new DoublyLinkedListNode();
    double pivot = first.ipk;
    while (index != temp.next) {
        if ((index.ipk) < pivot) {
            smallIndex = smallIndex.next;
            temp.ipk = index.ipk;
            index.ipk = smallIndex.ipk;
            smallIndex.ipk = temp.ipk;
        }
        index = index.next;
    }
    temp.ipk = first.ipk;
    first.ipk = smallIndex.ipk;
    smallIndex.ipk = temp.ipk;
    System.out.println("The list in partition is: ");
    list.print();
    System.out.print("\n");
    return first;
}

public void recQuickSort(DoublyLinkedList list, DoublyLinkedListNode first,
        DoublyLinkedListNode last) {
    while (first != last) {
        DoublyLinkedListNode pivotLocation = partition(list, first, last);
        recQuickSort(list, first, pivotLocation.back);
        recQuickSort(list, pivotLocation.next, last);
    }
}

主要的

public static void main(String[] args) {
    DoublyLinkedList d = new DoublyLinkedList();
    d.insertNode("Apep", "123", 3.5);
    d.insertNode("Alex", "121", 3.2);
    d.insertNode("Kujul", "124", 3.1);
    d.insertNode("Fahmi", "125", 3.7);
    d.print();
    d.quickSort(d);
    d.print();
}

所以从这些代码中会有无限循环输出,我不知道我的程序中哪个是无限循环的。谢谢。

4

2 回答 2

6

好吧,快速浏览一下,你已经打开了一个循环while (first != last),然后你不会重新分配这些变量中的任何一个。请记住,!=检查引用相等(“这些是否是相同的确切对象”)而不是逻辑相等(根据Object.equals(Object)方法)。因此,如果first != last进入该循环,您将永远不会退出该循环。

while (index != temp.next)之前在循环中也发生过类似的事情。

如果你有调试器,我会一步一步地尝试自己找出无限循环在哪里。如果您还没有学会如何使用调试器,那么现在是学习的好时机。如果您还没有时间,您可以退回到久经考验的技巧,即System.out.println("here!")在各个地方打印出调试行 ( )。我敢肯定他们中的一个会开始说“这里!这里!这里!这里!” 并准确地告诉你你在哪里遇到了无限循环。

于 2013-05-29T15:13:25.227 回答
0

我看到你的链接列表是一个双向链接列表。不知何故,您的任何内部节点next都持有对您之前访问过的任何其他内部节点的引用。

如果是这样,只有这样你while才能进入无限循环,问题出在代码的其他部分。

于 2013-05-29T15:18:19.410 回答