【问题标题】:StackOverflowError when implementing Iterator [duplicate]实现迭代器时出现 StackOverflowError [重复]
【发布时间】:2020-06-20 21:48:33
【问题描述】:

我应该创建一个模拟来完成 pythons 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++);
    }

}

}

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

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,我还没有找到任何关于构造函数和使用循环用于迭代器和迭代接口的东西。我知道 hasNext、next、remove 是内置方法,循环在哪里?在 Main 类中还是在某个内置类中?

【问题讨论】:

标签: java recursion


【解决方案1】:

这里有一个无限递归:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2017-09-08
    相关资源
    最近更新 更多