【发布时间】:2014-11-10 21:36:47
【问题描述】:
我有一个实现 Iterable 接口的 java 对象。这个链表有一组对象,每个对象都包含一个参数化对象(所以它可以是字符串或数组列表或其他)。
在 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?
谢谢!
【问题讨论】:
-
展示你如何实现新的迭代器实例
-
你必须展示一些真实的代码才能有一个有效的问题。
-
我添加了上面的代码。我添加了我认为相关的内容。如果您需要更多信息,请告诉我......
-
也许 numberOfItems 等于 0 ?
-
不是这样的。我在迭代器构造代码中放置了一个断点。它通过并获得正确的数组,这正是我想要的。但是,foreach 构造对它没有任何作用!