java迭代器退出迭代
随着本学期的结束,我想我会分享一个关于如何非常熟悉Java迭代器的小故事。
现实世界语境
就上下文而言,我开设了第二年软件组件课程,这是尝试进入该专业的学生的最后障碍。 当然,这门课程对学生来说压力很大,我经常必须加倍努力,为他们提供一切成功的机会。
不幸的是,本学期我们被大流行所笼罩,不得不转换为在线教学。 结果,我们不得不对教学做出一些快速决策,从而改变了学生的学习方式。 尤其是,我们将所有纸笔考试转换为在线测验。
对于某些学生来说,这是一个很大的祝福。 毕竟,这些测验并没有比考试更困难,因此我们将其设为公开考试。 换句话说,我们使课程变得更容易让他们通过。
当然,学生遍布世界各地,他们无法获得所需的帮助。 此外,学生没有像考试那样认真地学习。 这种结合创造了一些非常糟糕的测验分数。
到我们进行第四个测验时,学生们已经非常沮丧。 实际上,我从几位教师那里听说,他们的学生已经厌倦了“技巧性问题”。 作为一名讲师,听到这有些令人沮丧,因为它们是非常典型的考试问题。 我们并没有为他们增加困难,但这是我第一次听到这些抱怨。
示例问题
然后,发生了一些奇怪的事情。 我们给了他们一个我真的不知道答案的问题,结果有点类似以下内容:
以下代码片段后面的Set <NaturalNumber> nums变量的值是什么?
Set<NaturalNumber> nums = new SomeSetImplementation<>(); nums.add( new NaturalNumber2( 1 )); nums.add( new NaturalNumber2( 5 )); nums.add( new NaturalNumber2( 6 )); for (NaturalNumber n : nums) {
n.increment(); }
当然,学生的选择如下:
- nums = {1,5,6,2,6,7}
- nums = {2,6,7}
- nums = {1,5,6}
- 从提供的信息中无法分辨。
现在,就上下文而言,此示例中有一些内部组件。
首先,NaturalNumber是一个可变类,它表示无界的非负整数。 换句话说,NaturalNumber的范围可以从零到无穷大。 此外,可以使用一系列基本数学运算来修改NaturalNumber,如下所示:
-
increment()
加1this
-
add(NaturalNumber n)
:将n添加this
此外,这个问题让使用的Set
是类似于一个数学集合。 这里的想法是Set
具有两个主要属性:
-
Set
缺少重复项(即{1,2,1}不是合法集合)。 -
Set
是无序的(即{1,2,3}和{3,2,1}是等效的)。
作为参考,如果您有兴趣阅读更多详细信息,请在