为什么是无限循环

问题描述 投票:0回答:1

对不起,也许这是个新手问题。但这是我的讲师给我的一个作业,交期是明天。我试了很多方法,也跟踪输出,但结果还是无限循环。请大家帮忙。

问的问题。

将已通过的学生从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的第二年. 希望能得到您的帮助。非常感谢你的帮助。

java loops while-loop linked-list infinite-loop
1个回答
2
投票

从代码上看,你是在分配 StudentLinkedList failList = studentList;. 这不会创建一个 studentList 并不分配新的内存,而是意味着 failList 指向 studentList.

因此,任何变化在 failList 实际上是在改变 studentList.

这就可以理解为什么有一个无限循环,当它击中一个失败的学生,因为你实际上只是将学生添加到初始的。studentList 而不是新建的 failList 如意。

© www.soinside.com 2019 - 2024. All rights reserved.