2
我试图做一个foreach循环作为遵循一个LinkedList式的I类建:迭代器执行造成死循环
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循环时导致无限循环。
对不起,如果这个问题已被回答,或者有一个非常愚蠢的错误,我搜索了一段时间,找不到答案。这是我第一次写一个迭代器,所以请温和。 :)
当我这样做时,在Eclipse中出现错误:“在封闭范围内定义的局部变量当前必须是最终的或有效的最终结果”。 我试着改变下面的方法: public Thing next(){ \t Thing tmp = current; \t tmp = current.next; \t return tmp; } 但它仍然没有前进到列表中的下一个元素。 – Tbs95
@ Tbs95方法中的匿名类对封闭方法内的变量没有更改权限。您需要将'current'变量作为'Iterator'的实例变量,因为它是迭代器状态的一部分。 – khelwood
谢谢@Eran,但现在我已经更改了变量声明位置,我得到一个类型不匹配错误,将新的迭代器(){}转换为Thing。 –
Tbs95