0

我正在尝试在递归方法中使用迭代器。如果列表中没有下一个元素,它应该退出该方法。但是如果光标位于最后一个位置,则iterator.hasNext()返回检查true,我除外false

有什么想法和提示吗?

我不会张贴图片,所以我会写下来。这就是我在 Eclipse-Debugger-View 中看到的:

iterator             | AbstractList$Itr (id=448)

 - cursor            | 2
 - excpectedModCount | 2
 - lastRet           | 1
 - this$0            | ArrayList<E> (id=438)
 - elemtData         | Object[10] (id=462)

 ---modCount         | 2

 ---size             | 2

这是代码

static void resolveWithIterator(List<SomethingContext> list, Iterator<ContextResolveHelper> iterator, List<ContextResolveHelper> resolverList)
{
    boolean end = resolverList.iterator().hasNext();
    if (list.size() == 1 || !end){
        resolvedList.add(list);
        return;
    }else{
        ContextResolveHelper acutalEntry = iterator.next();
    List<SomethingContext> tempQRes2 = new ArrayList<SomethingContext>();
        for (SomethingContext smtCtx : list){
            if (//check various things){
                tempQRes2.add(smtCtx);
            }
        }
        resolveWithIterator(tempQRes2, iterator, resolverList);
    }
}
4

2 回答 2

2

我认为问题出在逻辑本身,正如您所写,您使用以下方法调用该函数:

Iterator<ContextResolveHelper> iterator = resolverList.iterator();    
resolveWithIterator(searchCtxResult, iterator, resolverList);

但是,在方法本身中你做了两件事,你检查下一个新的迭代器,而不是提供的迭代器

boolean end = resolverList.iterator().hasNext();

当至少有一个元素时,它将始终返回 true。

调用 iterator() 总是返回新的迭代器,你应该使用参数中提供的那个。

于 2013-02-01T15:09:47.230 回答
1

我唯一hasNext()看到的是resolverList.iterator().hasNext()。由于您每次都会得到一个新的迭代器,当然它总会有一个“下一个”,除非列表本身是空的。

于 2013-02-01T14:59:57.187 回答