为什么是这个无限循环



对不起,也许这是个新手问题。但这是我讲师的作业,预产期是明天。我已经尝试了很多方法来跟踪输出,但它仍然导致了无限循环。请帮忙。

问题是:

从studentList中删除通过的学生,并将他们移动到新的LinkedList passList

主要应用程序:

StudentLinkedList failList = studentList; //assume studentList is already existed with some data
StudentLinkedList passList = new StudentLinkedList();
Student s = (Student)studentList.removeFirst(); //the return type was Object (it was user-defined LinkedList)
//so i use dynamic binding to change it to student
while(s != null) {
if(s.isPass()) { //return true if student passed
System.out.println("pass"); //i track my output with this
passList.addFirst(s);
} else {
System.out.println("fail"); //track output
failList.addFirst(s);
}
s = (Student)studentList.removeFirst();
}

输出是失败和通过之间的无限循环,我认为循环是因为s从不为空。

这里删除第一个方法定义:

public Object removeFirst() {
if(head == null) { //check if the list was empty
return null;
} else {
current = head;
head = head.next;
if(head == null) {
tail = null;
}
return current.element;
}
}

我正在学习java的第二年。我们将感谢您的帮助。非常感谢。

从代码中,您正在分配StudentLinkedList failList = studentList;。这不会创建studentList的副本,也不会分配新的内存,而是意味着failList指向studentList

因此,在failList中所做的任何更改实际上都在studentList中进行更改。

这就解释了为什么当它击中一个失败的学生时会有一个无限循环,因为你实际上只是将该学生添加回初始的studentList,而不是新创建的failList

相关内容

  • 没有找到相关文章

最新更新