【发布时间】: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 类中还是在某个内置类中?
【问题讨论】:
-
为什么
Range同时成为Iterable和Iterator有意义? -
当然会出现堆栈溢出。您的
hasNext()方法会调用自身并尝试返回与其自身返回值相反的值。这应该如何工作? -
关于异常的帮助,最好贴几行异常Trace。