Java 使用while的无限循环
嘿,我有一个程序使用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
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();
}