Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.Iterable实例的迭代问题_Java_Iterator - Fatal编程技术网

java.lang.Iterable实例的迭代问题

java.lang.Iterable实例的迭代问题,java,iterator,Java,Iterator,我的代码 两者之间的区别是什么,为什么A不能合法,而B在工作 Can only iterate over an array or an instance of java.lang.Iterable 想知道为什么底层代码不起作用吗?for循环中是否发生了一些不同的事情而和的都提供了要迭代的相同迭代器状态。放弃迭代器调用: for (Test t : ob.iterator()) { ----------------------A System.out.println

我的代码

两者之间的区别是什么,为什么A不能合法,而B在工作

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

想知道为什么底层代码不起作用吗?for循环中是否发生了一些不同的事情
和的都提供了要迭代的相同迭代器状态。

放弃迭代器调用:

    for (Test t : ob.iterator()) {   ----------------------A

        System.out.println();

    }


while (ob.iterator().hasNext()) { -------------------------- B 

        System.out.println();

   }
必须为for循环指定一个Iterable(或数组),而不是迭代器


这:

几乎可以肯定,这不符合你的意思。每次计算循环保护时,这将在迭代开始时创建一个新的迭代器,并检查是否存在“下一个”元素。除非
ob
最初为空,否则在每次迭代中都将继续为空(除非从循环中的
ob
中删除元素)

(可能)正确的方法是:

while (ob.iterator().hasNext()) {
Iterator Iterator=ob.Iterator();
而(iterator.hasNext()){//在整个迭代过程中使用相同的迭代器实例。
T next=iterator.next();
}

ob in for loop,它的适用性如何?只是因为它实现了可移植的接口。你是怎么回来的?在while中,它被显式调用。@Maria
ob
是iterable,因为它是
Test
类型的变量,一个实现
iterable
的类。增强的for循环是语法糖,它被转换为for循环:编译器插入
iterator()
调用。看,这是做同样事情的不同方式吗?我错了吗?这回答了你的问题吗?还是这个
for (Test t : ob) {
while (ob.iterator().hasNext()) {
Iterator<T> iterator = ob.iterator();
while (iterator.hasNext()) { // use the same iterator instance throughout iteration.
  T next = iterator.next();
}