Java 实现迭代器时的堆栈溢出错误

Java 实现迭代器时的堆栈溢出错误,java,recursion,Java,Recursion,我应该创建一个模拟,它与pythons xrange一样,在java中选择开始编号、停止编号和步骤编号。我在将构造函数号传递给Range类时遇到了问题,因为它在线程“main”java.lang.StackOverflower中给了我一个异常。每次我通过程序时,范围构造函数都会变回“Rane@365“,我不知道这意味着什么,但我提供的数字已经不见了 package com.company; public class Main { public static void main(Strin

我应该创建一个模拟,它与pythons xrange一样,在java中选择开始编号、停止编号和步骤编号。我在将构造函数号传递给Range类时遇到了问题,因为它在线程“main”java.lang.StackOverflower中给了我一个异常。每次我通过程序时,范围构造函数都会变回“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类,它使用接口迭代器和接口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() {

}
package.com公司;
导入java.util.Iterator;
公共类范围实现Iterable、迭代器{
公共范围(整数开始、整数停止、整数步长){
开始=开始;
停止=停止;
步骤=步骤;
}
公共迭代器迭代器(){
归还这个;
}
公共布尔hasNext(){
如果(!this.hasNext()){
返回true;
}否则
返回false;
}
公共整数next(){
如果(!hasNext()){
抛出新的非法状态异常(“无下一个”);
}
返回null;
}
公共空间删除(){
}
}


我读过的东西使用了ArrayList,但我还没有发现任何关于构造函数和迭代器和Iterable接口使用循环的内容。我知道hasNext,next,remove是内置的方法,循环会在哪里?在主类或其中一个内置类中?

这里有一个无限递归:

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

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

为什么
Range
同时是
Iterable
迭代器
是有意义的?当然,你会得到堆栈溢出。您的
hasNext()
方法调用自身并尝试返回与其自身返回值相反的值。这是如何工作的?对于异常的帮助,最好是发布异常跟踪的几行。