我有一个实现Iterable接口的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对象的实现?是否有一些GOTCHA实施这个我没有考虑到?
谢谢!
答案 0 :(得分:2)
在hasNext
方法中检查return (index>=items.length);
是否会返回false。将操作数更改为"<"
答案 1 :(得分:0)
return (index<items.length); thanks anyways!
我一直在拉我的头发。我调试了其他所有东西,然后它突然出现在我身上。
这是我的第一个迭代器实现,所以我认为它一定是更基本的东西,我没有正确做。