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