如何创建从特定位置开始迭代的迭代器方法
How to create an iterator method that iterates starting at a specific position
我正在编写一个名为 public Iterator<E> iterator(int index)
的函数,它 returns 一个从列表中指定位置 ('index') 开始的迭代器。指定的索引从 0 开始。到目前为止,我的代码如下。
public Iterator<E> iterator(int index) {
Iterator<E> it = iterator(index);
while (it.hasNext()) {
E item = it.next();
System.out.println(item);
}
return it;
}
main 中的代码如下所示。
public static void main(String[] args) {
LinkedList<Integer> lst = new LinkedList<Integer>();
lst.add(3);
lst.append(6);
lst.append(5);
lst.append(7);
lst.iterator(1);
lst 是一个链表。当我尝试调用传递 1 的迭代器方法时,我希望它从位置 1 开始遍历链表,然后打印:6 5 7
.
然而,我收到一条错误消息
Exception in thread "main" java.lang.WhosebugError
at Midterm.LinkedList.iterator(LinkedList.java:183)
我不知道我做错了什么。我的问题是,任何人都可以告诉我如何修复我的 public Iterator<E> iterator(int index)
方法,以便从位置 1 开始遍历链表吗?
你递归地调用你的方法而不停止:
public Iterator<E> iterator(int index) {
Iterator<E> it = iterator(index); // calls this method again
所以它会无限期地调用 iterator(int index) -> iterator(int index) -> iterator(int index) -> ...
。
这将导致堆栈溢出,因为堆栈的大小有限。
我能够使用以下代码将我的迭代器方法return从索引变量位置开始的迭代器。
public Iterator<E> iterator(int index) {
Iterator<E> iterator = iterator();
for (int i = 0; i < index && iterator.hasNext(); i++) {
iterator.next();
}
return iterator;
}
我正在编写一个名为 public Iterator<E> iterator(int index)
的函数,它 returns 一个从列表中指定位置 ('index') 开始的迭代器。指定的索引从 0 开始。到目前为止,我的代码如下。
public Iterator<E> iterator(int index) {
Iterator<E> it = iterator(index);
while (it.hasNext()) {
E item = it.next();
System.out.println(item);
}
return it;
}
main 中的代码如下所示。
public static void main(String[] args) {
LinkedList<Integer> lst = new LinkedList<Integer>();
lst.add(3);
lst.append(6);
lst.append(5);
lst.append(7);
lst.iterator(1);
lst 是一个链表。当我尝试调用传递 1 的迭代器方法时,我希望它从位置 1 开始遍历链表,然后打印:6 5 7
.
然而,我收到一条错误消息
Exception in thread "main" java.lang.WhosebugError
at Midterm.LinkedList.iterator(LinkedList.java:183)
我不知道我做错了什么。我的问题是,任何人都可以告诉我如何修复我的 public Iterator<E> iterator(int index)
方法,以便从位置 1 开始遍历链表吗?
你递归地调用你的方法而不停止:
public Iterator<E> iterator(int index) {
Iterator<E> it = iterator(index); // calls this method again
所以它会无限期地调用 iterator(int index) -> iterator(int index) -> iterator(int index) -> ...
。
这将导致堆栈溢出,因为堆栈的大小有限。
我能够使用以下代码将我的迭代器方法return从索引变量位置开始的迭代器。
public Iterator<E> iterator(int index) {
Iterator<E> iterator = iterator();
for (int i = 0; i < index && iterator.hasNext(); i++) {
iterator.next();
}
return iterator;
}