Java:迭代器
所以我正在开发一个包含两种数据类型的程序:链表和Arraylist 链表迭代器如下所示:Java:迭代器,java,oop,iterator,Java,Oop,Iterator,所以我正在开发一个包含两种数据类型的程序:链表和Arraylist 链表迭代器如下所示: private class NodeIterator implements Iterator<StudentIF> { private Node curr; public NodeIterator(Node head) { curr = head; } public void remove() { }
private class NodeIterator implements Iterator<StudentIF> {
private Node curr;
public NodeIterator(Node head) {
curr = head;
}
public void remove() { }
public boolean hasNext() {
if (curr == null)
return false;
return true;
}
public StudentIF next() {
Node temp = curr;
curr = curr.getNext();
return temp.getData();
}
} // end class NodeIterator
下面是调用迭代器的方法:
public StudentIF getStudent(int id) {
Iterator<StudentIF> xy = iterator();
while (xy.hasNext()) {
if (id == xy.next().getId()) {
return xy.next();
}
}
// Student doesn't exist
return null;
}
public StudentIF getStudent(int-id){
迭代器xy=迭代器();
while(xy.hasNext()){
如果(id==xy.next().getId()){
返回xy.next();
}
}
//学生不存在
返回null;
}
我的问题是,当我调用我的方法通过它们的id(实例变量)获取对象时,它总是获取下一个对象,而不是我想要的对象。如何使用链表和数组列表获取当前对象
请帮帮我 您使用next()
方法两次,这可能就是原因
试试这个
while (xy.hasNext()) {
StudentIF tmp = xy.next();
if (id == tmp.getId()) {
return tmp;
}
每次使用next()方法时,它都会递增迭代器,因此通过调用
if (id == xy.next().getId())
及
实际上,您正在递增迭代器
最好是存储xy.next(),进行所需的任何比较,然后按如下方式返回:
public StudentIF getStudent(int id) {
Iterator<StudentIF> xy = iterator();
while (xy.hasNext()) {
StudentIF student = xy.next();
if (id == student.getId()) {
return student;
}
}
// Student doesn't exist
return null;
public StudentIF getStudent(int-id){
迭代器xy=迭代器();
while(xy.hasNext()){
StudentIF student=xy.next();
如果(id==student.getId()){
留学生;
}
}
//学生不存在
返回null;
}您正在调用
.next()
两次
解决方案应该只调用一次,并将其保存在如下变量中:
while (xy.hasNext()) {
StudentIF student = xy.next();
if (id == student.getId()) {
return student;
}
}
StudentIF nextStudent = xy.next();
if (nextStudent.getId() == id)
{
return nextStudent;
}
问题是您在这里的循环中调用了.next()两次:
if (id == xy.next().getId())
{
return xy.next();
}
调用next()两次将使迭代器前进两次,这不是您想要的。您需要将下一个off保存在一个临时变量中,如下所示:
while (xy.hasNext()) {
StudentIF student = xy.next();
if (id == student.getId()) {
return student;
}
}
StudentIF nextStudent = xy.next();
if (nextStudent.getId() == id)
{
return nextStudent;
}
您可能还希望提到可以防止出现问题的for(StudentIF student:xy)语法。回答得好。@ditkin。。。难道他不应该实现Iterable接口来实现它吗?谢谢Brian。我接受了你的回答,因为这是赎罪;好的补偿!:-)我在其他地方有这个bug,这就是我正在修复的;谢谢你的帮助!