遍历 Iterator<T> 类型的对象
Iterating over an object of type Iterator<T>
在阅读关于 Generators
的维基百科文章时,我发现以下 Java 实现迭代泛型 Iterator<Integer>
产生无限的斐波那契数列
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;
}
但是,当放在 class 的 main
方法中时,上面的代码不起作用。它说
Can only iterate over an array or an instance of java.lang.Iterable
这是可以理解的。这是否意味着上面的例子是错误的或不完整的?我错过了什么吗?
维基百科上的代码示例无效,但您仍然可以轻松地进行迭代,只需显式调用 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;
}
删除 for 循环并使用 while 循环。因为迭代器不是数组类型或集合。
试试这个
while(fibo.hasNext()) {
System.out.println(fibo.next());
}
在阅读关于 Generators
的维基百科文章时,我发现以下 Java 实现迭代泛型 Iterator<Integer>
产生无限的斐波那契数列
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;
}
但是,当放在 class 的 main
方法中时,上面的代码不起作用。它说
Can only iterate over an array or an instance of java.lang.Iterable
这是可以理解的。这是否意味着上面的例子是错误的或不完整的?我错过了什么吗?
维基百科上的代码示例无效,但您仍然可以轻松地进行迭代,只需显式调用 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;
}
删除 for 循环并使用 while 循环。因为迭代器不是数组类型或集合。 试试这个
while(fibo.hasNext()) {
System.out.println(fibo.next());
}