我有一个实现 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/