[英]Java Iterator - infinite loop
我究竟做錯了什么? 為什么這個迭代器繼續運行?
default List<T> greedyAlgorithm() {
List<T> lst = new ArrayList<>();
T element = selection().next();
while(selection().hasNext()) {
if(feasibility(lst ,element)) {
assign(lst, element);
} else {
element = selection().next();
}
if(solution(lst)){
return lst;
}
}
return null;
}
可行性 function 檢查元素是否可行,如果是,則將元素分配給列表。 然后解決方案檢查這是否是“算法”解決方案並返回列表,否則檢查列表中的下一個元素。
next
應該總是在循環內執行。
如果feasibility
條件不為false
或solution
為真,那么它將繼續運行而不推進。
我建議重新安排循環,以便您無條件調用next
。
如果selection
每次調用都返回一個新的Iterator
,也可能會出現問題。
也許是這樣的:
default List<T> greedyAlgorithm() {
List<T> lst = new ArrayList<>();
for (
Iterator<T> selection = selection();
selection.hasNext();
) {
T element = selection.next();
if (feasibility(lst ,element)) {
assign(lst, element);
if (solution(lst)) {
return lst;
}
}
}
return null;
}
如果selection()
返回一個Iterable
你可以使用一個豪華的 for 循環。 通常返回諸如Iterable
之類的(某種)不會改變內部 state 的類型比諸如Iterator
之類的類型要好(盡管有remove
所以Iterable.iterator
並非完全無辜)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.