我正在尝试为我构建的链表式类执行以下 foreach 循环:
boolean contains = false;
for(Thing t : front) {
if(t.equals(something)) {
t.doSomething();
contains = true;
break;
}
}
这是我实现的迭代器方法:
@Override
public Iterator<Thing> iterator() {
Thing current = this;
return new Iterator<Thing>() {
public boolean hasNext() {
return current.hasNext();
}
public Thing next() {
return current.next;
}
};
}
我已经尝试对此进行调试,似乎它没有返回链接列表中的下一个元素,因此当我运行它并尝试执行 foreach 循环时会导致无限循环。
很抱歉,如果这个问题已经得到解答或者存在一个非常愚蠢的错误,我搜索了一段时间但找不到答案。这是我第一次编写迭代器,所以请温柔一点。 :)
最佳答案
您必须在 next()
中推进 Iterator
的状态:
public Thing next() {
current = current.next;
return current;
}
否则,对 next()
的所有调用都将返回相同的元素。
编辑:
您应该将局部变量声明 Thing current = this;
移动到匿名类实例中(即将其转换为实例变量)。
@Override
public Iterator<Thing> iterator() {
return new Iterator<Thing>() {
private Thing current = Thing.this;
public boolean hasNext() {
return current.hasNext();
}
public Thing next() {
current = current.next;
return current;
}
};
}
关于java - 迭代器实现导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33627656/