Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用while的无限循环_Java_Infinite Loop - Fatal编程技术网

Java 使用while的无限循环

Java 使用while的无限循环,java,infinite-loop,Java,Infinite Loop,嘿,我有一个程序使用while循环,但我真的很困惑为什么它会变成无限循环 这是我的密码 打印空白 public void print() { DoublyLinkedListNode current = first; while (current != null) { current.displayInfo(); current = current.next; }//end while }//end print public Doubl

嘿,我有一个程序使用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);
    }
}

因此,从这些代码将有无限循环输出,我不知道哪个是我的程序使其成为无限循环的。谢谢。

好吧,只需快速浏览一下,您就在
上有了一个循环,而(first!=last)
,然后您不需要重新分配这些变量中的任何一个。记住
=检查引用相等(“这些对象是否完全相同”)而不是逻辑相等(根据
object.equals(object)
方法)。所以如果
先最后一次进入该循环,您将永远不会退出该循环

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


如果你有一个调试器,我会一步一步地去尝试找出无限循环在哪里。如果您还没有学会如何使用调试器,那么现在是学习的好时机。如果您还没有时间,可以回到经过时间考验的技巧,在不同的地方打印调试行(
System.out.println(“here!”)
)。我确信其中一个会开始说“这里!这里!这里!这里!”并准确地告诉你在哪里碰到无限循环。

好吧,只要快速一看,你就在
上有一个循环,而(第一个!=最后一个)
然后你就不需要重新分配这些变量中的任何一个。记住
=检查引用相等(“这些对象是否完全相同”)而不是逻辑相等(根据
object.equals(object)
方法)。所以如果
先最后一次进入该循环,您将永远不会退出该循环

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


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

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


如果是这样的话,那么你的
while
就可以进入无限循环,问题出在代码的另一部分。

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


如果是这样的话,只有当你的
while
进入无限循环时,问题才出现在代码的另一部分。

这是一个学习练习吗?如果不是,我建议你看看这个图书馆课程:好的,谢谢你的建议。这是一个学习练习吗?如果不是,我建议您看看这个库类:好的,谢谢您的建议。这是一个递归算法,首先=最后一个看起来像基本情况-也许应该是if(first!=last)?打得好,@selig。我认为
first==last
实际上是基本情况,但是是的。发生的事情是,它递归到基本情况,在这一点上它返回,再次尝试相同的基本情况,返回,再次尝试相同的基本情况,…这是一个递归算法,首先=最后一个看起来像基本情况-也许应该是if(first!=last)?打得好,@selig。我认为
first==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();
}