2017-07-14 81 views
1

我有以下的Java代碼:Java匿名迭代器?

while (pOn[j].iterator().hasNext()) { 
    stats.decrement(getNodeCase((int) (pOn[j].iterator().next()), hidden, o)); 
} 

目前,它不會終止。我懷疑這是因爲pOn [j] .iterator()每次都返回一個新的迭代器。有沒有辦法解決這個問題,而不是將迭代器分配給臨時變量?謝謝。

編輯:我不小心把這條線不應該在那裏。 pOn[j].iterator().next();。我已經刪除它。

+0

對於爲什麼不終止您是正確的。你爲什麼不想要一個臨時變量? –

+1

每次調用'iterator()'時,都會創建一個* new *迭代器,它從第一個元素開始。不要這樣做。調用'iterator()'一次並將迭代器存儲在一個變量中。 – Jesper

+0

如果您不想將迭代器分配給臨時變量,則可以嘗試保留一個計數變量並在計數完成後終止循環。 – CodeHunter

回答

0

.iterator()從第一個元素返回新的迭代器。將迭代器放入一個變量中。

Iterator itr = pOn[j].iterator(); 
while (itr.hasNext()) { 
    stats.decrement(getNodeCase((int) (pOn[j].iterator().next()), hidden, o)); 
    itr.next(); 
} 
0

你正在從你的問題得出錯誤的結論。你說你有8個類似的塊,因此你不想使用局部變量。

雖然這已經導致您編寫不正確的錯誤代碼。

你看 - 問題不是該迭代器的附加變量。事實上,你已經擁有了8個街區。

所以這裏的答案:退一步,確定您的代碼共用部位,創造有益的抽象(可能是一些小的輔助方法),以消除重複代碼不同於8塊到來。你會發現,當你找到一種方法來隱藏輔助方法中的循環時 - 你是否真的更關心用於該迭代器的變量?