我正在尝试按照我构建的链表列表类的方式执行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循环时会导致无限循环。
很抱歉,如果这个问题已经得到解答或者有一个非常愚蠢的错误,我搜索了一段时间后找不到答案。这是我第一次编写迭代器,所以请保持温和。 :)
答案 0 :(得分:6)
您必须在Iterator
中推进next()
的状态:
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;
}
};
}