Previously on OOP:
To solve the problem of over riddingiterator()function, we have decided to create a new nested class extending(s) Iterator interface. In the last article, we have seen three different kinds of nested classes: static class, inner class, and anonymous class.
在RandExamples类中,包含main函数,而且我们已经调用了RandomSequence类的构造函数来创建一组随机数。最小值是1,最大值是10,数组中随机数的个数是5个。另外,在RandomSequence类中,已经实现了Iterator。所以,现在我们可以继续编写main函数,来使用Iterator。
第一件事是遍历存放随机数的数组,并且打印出数组中的每一个元素。在考试的时候,这个功能一定要通过for or for each statement来实现,否则就太浪费时间了。这就好比《线性代数》中的矩阵和行列式也可以解方程,但是在没有强制要求的情况下,解方程还是要用代入法。
While循环的条件是数组中还有下一个元素。循环体中是指向数组中的下一个元素,然后打印在console window中。如果当前数据是数组中的最后一个,那么就退出循环,并且打印一个回车符号。由此可见,Iterator虽然实现起来比较困难,但是调用起来还是非常清晰的。
下面,让我们来复习一下for and for each statement:
上面这段代码行不行呢?答案是显然不行。因为object reference r的类型不是int类型,而是RandomSequence类型。It is not allowed to convert from a class to a primitive type,除非是wrapper classes。为了实现casting,用wrapper classes中继一下也是可以的。
临时变量n的类型是Object类,而Object类又是所有类的父类,所以n可以指向r中的(数组中的)每一个元素。看到前面的括号总感觉有哪里不对。因为前文的例子中,r都是一个数组的object reference,这里却只是一个RandomSequence类型的object reference。但是,这样编写确实是没有问题的,也从侧面说明了for each statement的强大。
前面运用Iterator的时候,只用了hasNext()and next() methods,那么令我们头疼不已的iterator()函数有什么用呢?
只有加上"import java.util.Iterator;"本段代码才能编译。此外,本段代码和for each statement,以及只用了hasNext()and next()函数的Iterator代码都等效。
本段代码的循环结构和第一段非常相似,只是hasNext()and next()函数不是RandomSequence中的,而是Iterator中的。
欢迎使用本黄鸭编写的小程序~
微信公众号二维码:
领取专属 10元无门槛券
私享最新 技术干货