[英]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.