Java 实现迭代器时的堆栈溢出错误
我应该创建一个模拟,它与pythons xrange一样,在java中选择开始编号、停止编号和步骤编号。我在将构造函数号传递给Range类时遇到了问题,因为它在线程“main”java.lang.StackOverflower中给了我一个异常。每次我通过程序时,范围构造函数都会变回“Rane@365“,我不知道这意味着什么,但我提供的数字已经不见了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
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()
方法调用自身并尝试返回与其自身返回值相反的值。这是如何工作的?对于异常的帮助,最好是发布异常跟踪的几行。