Java迭代器-无限循环
我做错了什么?为什么这个迭代器一直在运行Java迭代器-无限循环,java,iterator,Java,Iterator,我做错了什么?为什么这个迭代器一直在运行 默认列表greedyAlgorithm(){ List lst=new ArrayList(); T元素=选择().next(); while(selection().hasNext()){ if(可行性(lst,要素)){ 分配(lst,元素); }否则{ 元素=选择(); } if(解决方案(lst)){ 返回lst; } } 返回null; } 可行性功能检查元素是否可行,如果可行,则将元素分配到列表中。然后解决方案检查这是否是“algo”
默认列表greedyAlgorithm(){
List lst=new ArrayList();
T元素=选择().next();
while(selection().hasNext()){
if(可行性(lst,要素)){
分配(lst,元素);
}否则{
元素=选择();
}
if(解决方案(lst)){
返回lst;
}
}
返回null;
}
可行性功能检查元素是否可行,如果可行,则将元素分配到列表中。然后解决方案检查这是否是“algo”解决方案并返回列表,否则检查列表中的下一个元素。
next
应始终在循环内执行
如果可行性
条件不是假
或解决方案
真,那么它将继续运行而不前进
我建议重新安排循环,以便无条件调用next
如果选择
每次调用都返回一个新的迭代器
,也可能会出现问题
也许是这样的:
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;
}
默认列表greedyAlgorithm(){
List lst=new ArrayList();
为了(
迭代器选择=选择();
selection.hasNext();
) {
T元素=selection.next();
if(可行性(lst,要素)){
分配(lst,元素);
if(解决方案(lst)){
返回lst;
}
}
}
返回null;
}
如果
selection()。一般来说,返回一个类型,例如Iterable
,它(某种程度上)不会改变内部状态,比返回一个类型,例如Iterator
(虽然有remove
所以Iterable.Iterator
并不是完全无辜的)。方法selection()
做什么和返回什么?它是否返回一个迭代器
?您可能应该调用它一次,并将迭代器
保存在变量中,然后使用它,而不是多次调用它。如果每次您调用它时它都返回一个新的迭代器,那么您的循环将是无限的。选择“是”将返回一个迭代器,谢谢,尝试您的想法