面向对象的编程-Application 15

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中的。

欢迎使用本黄鸭编写的小程序~

微信公众号二维码:

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181015G1FV1F00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券