Java Iterable对象不能正确迭代

时间:2014-09-17 00:45:24

标签: java iterable

我有一个实现Iterable接口的java对象。这个链表有一组对象,每个对象都有一个参数化对象(所以它可以是一个String或一个ArrayList或者其他)。

在iterator()方法中,我创建了一个Iterator对象,它接受这些参数化项的数组并将其返回。

但是,当我使用以下代码时:

//create an Iterable object named 'iterate'
for(String current : iterate){
//try to do some stuff with it... print it out?
}

//more code

//这是我如何实现我的Iterable类的迭代器函数:

public Iterator<Item> iterator(){
   // return an iterator over items in order from front to end
    Item[] items = (Item[]) new Object[numberOfItems];
    QueueItem<Item> item = first;
    for(int i=0;i<numberOfItems;i++){
        items[i] = item.getInfo();
        item = item.next;
    }
    return new myIterator(items);
}

//here is the code for the myIterator class. it is a private internal class

private class myIterator implements Iterator<Item>{

    Item items[];
    int index;
    public myIterator(Item current[]){
        items = current;
        index = 0;
    }
    @Override
    public boolean hasNext() {
        if(items==null){
            return false;
        }
        return (index>=items.length);
    }

    @Override
    public Item next() {
        if(index+1>=items.length){
            throw new NoSuchElementException("There are no more elements!");
        }
        return items[index++];
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException("this operation is not supported");
    }

}

代码转到for循环,然后正确创建Iterator对象(我使用断点确认),并返回它,但然后代码跳出for循环而不经过它甚至一次继续...

我错过了什么吗?我在这里做错了吗?我如何更改Iterable对象的实现?是否有一些GOTCHA实施这个我没有考虑到?

谢谢!

2 个答案:

答案 0 :(得分:2)

hasNext方法中检查return (index>=items.length);是否会返回false。将操作数更改为"<"

答案 1 :(得分:0)

哦,天啊。真难为情。 hasNext方法反转了布尔语句。

应该是:

return (index<items.length); thanks anyways! 

我一直在拉我的头发。我调试了其他所有东西,然后它突然出现在我身上。

这是我的第一个迭代器实现,所以我认为它一定是更基本的东西,我没有正确做。