实现Iterator时发生StackOverflow错误



我应该创建一个模拟,它做Python xrange所做的事情,即在java中选择开始号、停止号和步骤号。我在将构造函数编号传递给Range类时遇到了问题,因为它在线程"main"java.lang.StackOverflowError中给了我一个异常。每次我遍历程序时,Range构造函数都会变回"Rane@365",我不知道这意味着什么,但我提供的号码不见了。

package com.company;
public class Main {
public static void main(String[] args) {
for (Integer num: new Range(1,10,2)) {
System.out.println(num++);
}
}
}

这是我的Range类,它使用接口Iterator和接口Iterable

package com.company;
import java.util.Iterator;
public class Range implements Iterable<Integer>, Iterator<Integer> {
public Range(int start, int stop, int step){
start = start;
stop = stop;
step = step;
}

public Iterator<Integer> iterator() {
return this;
}

public boolean hasNext() {
if (!this.hasNext()) {
return true;
} else
return false;
}

public Integer next() {
if (!hasNext()) {
throw new IllegalStateException("No next");
}
return null;
}
public void remove() {
}

}

我读过的东西使用ArrayLists,我没有发现任何关于构造函数和Iterator和Iterable接口的使用循环的内容。我知道hasNext,next,remove是内置的方法,循环在哪里?在Main类中还是在某个内置类中?

这里有一个无限递归:

public boolean hasNext() {
if (!this.hasNext()) {
...

这个方法每次都会调用自己,增加堆栈,直到得到StackOverflowException。

最新更新