在阅读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
这是可以理解的。这是否意味着上面的例子是错误的还是不完整的?我错过了什么吗?
答案 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());
}