【发布时间】:2011-02-06 20:49:48
【问题描述】:
说实话,我不太确定我自己是否理解这个任务 :) 我被告知要创建类 MySimpleIt,它实现了 Iterator 和 Iterable,并允许运行提供的测试代码。对象的参数和变量不能是集合或数组。
代码:
MySimpleIt msi=new MySimple(10,100,
MySimpleIt.PRIME_NUMBERS);
for(int el: msi)
System.out.print(el+" ");
System.out.println();
msi.setType(MySimpleIterator.ODD_NUMBERS);
msi.setLimits(15,30);
for(int el: msi)
System.out.print(el+" ");
System.out.println();
msi.setType(MySimpleIterator.EVEN_NUMBERS);
for(int el: msi)
System.out.print(el+" ");
System.out.println();
我应该得到的结果:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
15 17 19 21 23 25 27 29
16 18 20 22 24 26 28 30
这是我的代码:
import java.util.Iterator;
interface MySimpleIterator{
static int ODD_NUMBERS=0;
static int EVEN_NUMBERS = 1;
static int PRIME_NUMBERS = 2;
int setType(int i);
}
public class MySimpleIt implements Iterable, Iterator, MySimpleIterator {
public MySimple my;
public MySimpleIt(MySimple m){
my = m;
}
public int setType(int i){
my.numbers = i;
return my.numbers;
}
public void setLimits(int d, int u){
my.down = d;
my.up = u;
}
public Iterator iterator(){
Iterator it = this.iterator();
return it;
}
public void remove(){
}
public Object next(){
Object o = new Object();
return o;
}
public boolean hasNext(){
return true;
}
}
class MySimple {
public int down;
public int up;
public int numbers;
public MySimple(int d, int u, int n){
down = d;
up = u;
numbers = n;
}
}
在测试代码中,创建 MySimpleIt msi 对象时出现错误,因为它找到的是 MySimple 而不是 MySimpleIt。我在 for-each 循环中也有错误,因为编译器想要“ints”而不是 Object。有人知道如何解决吗?
【问题讨论】:
-
你不应该使用 new MySimpleIt() 而不是 new MySimple() 吗?
-
看起来测试代码使用了 3 个不同的名称来表示应该是同一个类:MySimple、MySimpleIt 和 MySimpleIterator。
-
这是一个不寻常的请求,因为 SimpleIt 是它自己的迭代器。因此,您的 iterator() 方法应该返回“this”。这应该可以帮助您入门,我建议您深入研究几个标准迭代器和可迭代对象,看看它们是如何工作的,一旦您了解了模式,剩下的就是在 next() 方法中填充逻辑,以便为您提供正确的数字(我很确定你可以从 Java 数学库中得到质数,这应该会让事情变得非常简单)
-
不要创建一个既是 Iterable 又是它自己的 Iterator 的对象。
-
@Thilo 他被特别要求这样做。
标签: java interface iterator iteration