Java Iterable 对象无法正确迭代

标签 java iterable

我有一个实现 Iterable 接口(interface)的 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 对象的实现?在实现这个过程中是否有一些我没有考虑到的问题?

谢谢!

最佳答案

hasNext检查 return (index>=items.length); 的方法那么这将返回 false。将操作符更改为 "<"

关于Java Iterable 对象无法正确迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25880588/

相关文章:

python - 如何以子集长度为条件迭代列表的所有分区

java - 自定义 JOptionPane 对话框

java - 可迭代 <Path> 与 Path

python - 可从 Pandas 数据框迭代

java - 将元素添加到java中的iterable

java - 对类型 `List<Iterable<Object>>` 的列表进行排序

java - 解析模板时出错 "~{fragments/header",模板可能不存在或无法由任何已配置的模板解析器访问

java - 适用于 Android 的 tensorflow

java - JVM INSTR monitorenter 和 JVM INSTR monitorexit

java - 为什么我总是回复 1011 而不是 1101?