Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java迭代器-无限循环_Java_Iterator - Fatal编程技术网

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()
做什么和返回什么?它是否返回一个
迭代器
?您可能应该调用它一次,并将
迭代器
保存在变量中,然后使用它,而不是多次调用它。如果每次您调用它时它都返回一个新的
迭代器,那么您的循环将是无限的。选择“是”将返回一个迭代器,谢谢,尝试您的想法