迭代Iterator类型的对象<t> </t>

时间:2015-04-02 18:49:20

标签: java iterator iteration

在阅读Generators上的维基百科文章时,我发现以下Java实现迭代泛型类型Iterator<Integer>会产生无限的Fibonacci数字序列

Iterator<Integer> fibo = new Iterator<Integer>() {
    int a = 1;
    int b = 1;
    int total;

    @Override
    public boolean hasNext() {
        return true;
    }

    @Override
    public Integer next() {
        total = a + b;
        a = b;
        b = total;
        return total;
    }

    @Override
    public void remove() {
        throw new UnsupportedOperationException();
    }
}
// this could then be used as...
for(int f: fibo) {
    System.out.println("next Fibonacci number is " + f);
    if (someCondition(f)) break;
} 

但是,当放入类的main方法时,上面的代码不起作用。它说

Can only iterate over an array or an instance of java.lang.Iterable

这是可以理解的。这是否意味着上面的例子是错误的还是不完整的?我错过了什么吗?

2 个答案:

答案 0 :(得分:5)

维基百科上的代码示例无效,但只需明确调用hasNext()next()即可轻松进行迭代。

// We know that fibo.hasNext() will always return true, but
// in general you don't...
while (fibo.hasNext()) {
    int f = fibo.next();
    System.out.println("next Fibonacci number is " + f);
    if (someCondition(f)) break;
}

答案 1 :(得分:0)

删除for循环并使用while循环。因为迭代器不是数组类型或集合。 试试这个

while(fibo.hasNext()) {
    System.out.println(fibo.next());

}