簡體   English   中英

Java 迭代器 - 無限循環

[英]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條件不為falsesolution為真,那么它將繼續運行而不推進。

我建議重新安排循環,以便您無條件調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM