【发布时间】:2021-11-16 10:40:38
【问题描述】:
我在向 ArrayList 添加迭代器支持时遇到问题 这是我为实现迭代器而创建的类
class MyArrayListIterator<E> implements Iterator<E> {
private E[] list = null;
private int currentIndex = 0;
@Override
public boolean hasNext() {
if (currentIndex < list.length) {
return true;
} else {
return false;
}
}
@Override
public E next(){
return list[currentIndex++];
}
} 这必须包括,我认为我做对了
MyArrayList 类型的“列表”
int 类型的“currentIndex”,初始为零
这是我的主要测试方法
public static void main(String[] args) throws Exception {
MyList<String> names = new MyArrayList<>();
names.add("Steve");
names.add("Frank");
names.add("Heather");
names.add("Chris");
names.add("Oliver");
for (String string : names) { // error at names Can only iterate over an array or an instance of java.lang.Iterable
System.out.println(string);
}
}
}
在我添加的 myArrayList 中,要求是通过添加 iterator() 方法使 MyArrayList 实现 Iterable 接口,该方法应返回 MyArrayListIterator 的实例。
public Iterator<E> iterator() {
return new MyArrayListIterator();
}
请让我知道我做错了什么。
【问题讨论】:
-
您的
next()实施在哪里? -
MyList 是否扩展了 Iterable?
-
我添加了 next() 并且它没有扩展 Iterable
-
您似乎从未将
list初始化为非null值,所以我假设您得到的是NullPointerException。如果不是这种情况,请说明您的代码是如何工作的。 -
扩展 Iterable 删除了所有错误,但是一旦我运行收到的代码,我就无法读取数组长度,因为“this.list”为空