
问题7:开始Java的真实尝试-球和箱子 直到现在,我们仅仅介绍了一些工只。在本问题中,我们将深入研究个真实的程序 练习。1果你对jaa还不是很熟悉,我们推荐你略读·下Sun's Java Tutorial 本问邀的目的是让你对va程序设计的凯节有个认识和学会使用clipseJUnit试正 只。如果你从未编写过Jva程序,你可能发现本可题很只挑战性.不要气铵,如果你现在 在本问题上下功夫的话,你:将会在本节的后续部分不会遇到麻烟。这也是我们或师结伴编 程的原因。目的是有们aa编程经验的学生可以帮助那些没有经验的来加快进度,然而,如果 你西到难题的话,请不要犹豫的向助教或者实验室人员寻求帮助 当你在本问愿上.工作时,你应该将你对各个问题的解答记录在工程的d0 directory月录下的problem7Ixt文件中, ,热身运动:创建一个球的类 作为个热身练习,看·下Ball.java。·个球类是个只有容量的简单对象。 ·Ball.java有什么错误?请修正其存在的问愿,并i记录在problem7.txt文件中 b.使用预定义的数据结构 接下来我们创建一个名字为BallContainer的类。像以前一样,我们给出了代码框架(见 BallContainer java】一个BallContainer类是球类的容卷。BallContainer:必须支持一下方法,你 的任务是填充这下代码使之能正确的运行: 1 add(Rall) 2 remove(Ball) 3 getCapacity() 4 sizc() 5 clear() 6 contain(Ball) 一个好处就是其拥有很多的类库预定义的数据结构,这些你可以简单的使用不 必自已书写.这个问愿的目的.之一就是让你使用一下预定义的数据结构.在BallContainer中, 我们使用java.util.LinkedList来跟综球的轨迹,如果你在Eclipse下打开BallContainer.java,你 将会注意到有一行语句存在警告信息: contents new LinkedList();
问题7: 开始Java的真实尝试 – 球和箱子 直到现在,我们仅仅介绍了一些工具。在本问题中,我们将深入研究一个真实的程序 练习。如果你对java还不是很熟悉,我们推荐你略读一下Sun's Java Tutorial 本问题的目的是让你对Java程序设计的细节有个认识和学会使用Eclipse和JUnit测试工 具。如果你从未编写过Java程序,你可能发现本问题很具挑战性。不要气馁,如果你现在 在本问题上下功夫的话,你将会在本节的后续部分不会遇到麻烦。这也是我们鼓励结伴编 程的原因。目的是有java编程经验的学生可以帮助那些没有经验的来加快进度,然而,如果 你遇到难题的话,请不要犹豫的向助教或者实验室人员寻求帮助。 当你在本问题上工作时,你应该将你对各个问题的解答记录在工程的doc/ directory目录下的problem7.txt文件中。 a. 热身运动: 创建一个球的类 作为一个热身练习,看一下Ball.java。一个球类是一个具有容量的简单对象。 • Ball.java有什么错误?请修正其存在的问题,并记录在problem7.txt文件中 b. 使用预定义的数据结构 接下来, 我们创建一个名字为BallContainer的类。像以前一样,我们给出了代码框架(见 BallContainer.java)一个BallContainer类是球类的容器。BallContainer必须支持一下方法,你 的任务是填充这下代码使之能正确的运行: 1 add(Ball) 2 remove(Ball) 3 getCapacity() 4 size() 5 clear() 6 contains(Ball) Java一个好处就是其拥有很多的类库和预定义的数据结构,这些你可以简单的使用不 必自己书写。这个问题的目的之一就是让你使用一下预定义的数据结构。在BallContainer中, 我们使用java.util.LinkedList来跟踪球的轨迹,如果你在Eclipse下打开BallContainer.java,你 将会注意到有一行语句存在警告信息: contents = new LinkedList();

报的警告信总应该是“不安全的类型操作”,如果你对Ja1.5不熟悉的话,你可能感到 这个警告很困扰。白Jaal.5后,Java集合类,如果你注意到Eclipse内的警告信息,你应该能 够发现至少存在一处错误没有指向JUt结果。根架被严格定义,而不是定义一个通用的 LinkedList,你应该定义类型LinkedList。请修正该行去除构造器语句中的警告信息. 在你开始要怨承那些必须方法前,清花一点时问路读一下1 inkedlist的文档。一些你需 婴实现的方法仅仅是简单的要求你调用l.imk.中的合通的预定义好的方法。 提示:将光标放到LinkedList上,然后按下SHIFT-F2.个网页☒口将会出现,展示的 是关于LinkedList类的文档信总. 你击要实现的大部分方法都是非常的简单,在你开始纠写代码前,请花些时问思考如 下问燃(你需要提交你的答案): ·实现etCapacity(0有两种不同的方法: 每当getCapacity(0被调用时,仔细检查L.inkedl.is中的所有Balls并合计其数量.(提示: 如果你选择了这个方法。你或许要使用一个Iterator从LinkedList抽取Balls。.你可以参照 BoxTes试java示例看如何使用Itcrator)~ 1跟踪llContainer中3lls的数量,无论其被添加或者删除。这岳要一定量的算, 哪一种方法你认为更好些?为什么? c.实现算法 在你完成BallContainer类后,你应该感觉到对Java很熟悉了,所以在本问题中,我们想 要你做一些设计并编写一些代码。在本问题中你最终的任务是创建一个B0x类。一个B0x类 是Ballsf的容器。Box和BallContainer不同点的关键是Box的容量是预先明确定义好的。一旦 x满了,我们将不能放入Bals。当构造函数被湖用时,Bx的容量即被定义, public Box(double capacity): 因为Box本质上.就是一个只有额外属性的BallContainer,可以说Box是BallContainer的一 种类型,这也是Box被定义为张承自BallContainer的原闪、这也称为兼承。不要对其有太多 的担心;你将会在以后的本谍程中学到更多。见在显解到Box自动拥有了BallContainer的所 有画性和方法就足够了。当你阅读以下Box.jav时,你将会发现在wjv,中仅仅有两个定 义好的方法: 1 add(Ball) 2 getBallsFromSmallest()
报的警告信息应该是“不安全的类型操作”。如果你对Java1.5不熟悉的话,你可能感到 这个警告很困扰。自Java1.5后,Java集合类,如果你注意到Eclipse内的警告信息,你应该能 够发现至少存在一处错误没有指向JUnit结果。框架被严格定义,而不是定义一个通用的 LinkedList,你应该定义类型LinkedList。请修正该行去除构造器语句中的警告信息。 在你开始要继承那些必须方法前,请花一点时间略读一下LinkedList的文档。一些你需 要实现的方法仅仅是简单的要求你调用LinkedList. 中的合适的预定义好的方法。 提示:将光标放到LinkedList上,然后按下SHIFT-F2。一个网页窗口将会出现,展示的 是关于LinkedList类的文档信息。 你需要实现的大部分方法都是非常的简单,在你开始编写代码前,请花些时间思考如 下问题(你需要提交你的答案): : • 实现 getCapacity()有两种不同的方法: 每当getCapacity()被调用时,仔细检查LinkedList中的所有Balls并合计其数量。(提示: 如果你选择了这个方法,你或许要使用一个Iterator从LinkedList抽取Balls。你可以参照 BoxTest.java示例看如何使用Iterator)。 1跟踪BallContainer中Balls的数量,无论其被添加或者删除。这需要一定量的计算。 的 哪一种方法你认为更好些?为什么? c. 实现算法 在你完成BallContainer类后,你应该感觉到对Java很熟悉了,所以在本问题中,我们想 要你做一些设计并编写一些代码。在本问题中你最终的任务是创建一个Box类。一个Box类 是Balls的容器。Box和BallContainer不同点的关键是Box的容量是预先明确定义好的。一旦 box满了。我们将不能放入Balls。当构造函数被调用时,Box的容量即被定义。 public Box(double capacity); 因为Box本质上就是一个具有额外属性的BallContainer,可以说Box是BallContainer的一 种类型,这也是Box被定义为继承自BallContainer的原因。这也称为继承。不要对其有太多 的担心;你将会在以后的本课程中学到更多。现在理解到Box自动拥有了BallContainer的所 有属性和方法就足够了。当你阅读以下Box.java时,你将会发现在Box.java,中仅仅有两个定 义好的方法: 1 add(Ball) 2 getBallsFromSmallest()

根据你在问起7b中对etCapacity)的实见,你需要为Box类实现一个不同的remove(Ball) 方法。如果这样的话,请这样做。你不需受为了本何题修改你对BallContainer的实现。你也 可能对Ikl,IContainer或者Ix做出了修或,但是你必须在problem7x文件中详运你的 修改并解释你这样做的原因 正如以前一样,你的任务是实现这两个方法。在你开始实现getBallsFromSmallest()方法 前,你需安略欲·下Iterator的文档(将光标饭到上.面,控卜SHIFT-F2。),同样,请花些时 间回答下面的问题(你需要提交): 1实玫ctBallsFromSmallest0时,存在很多的方法.和你的小绍一起证行谈论。提至少两 种方法,详细描述之. 2上面的两个方法中那一个你认为较好?为什么? 不存在单·下确的答案。这个练习的十要口的是帮助你在编码前要多做些思考,面不 是不经思考急于娱码。请记住;多思考,少编码
根据你在问题7b中对getCapacity()的实现,你需要为Box类实现一个不同的remove(Ball) 方法。如果这样的话,请这样做。你不需要为了本问题修改你对BallContainer的实现。你也 可能对Ball,BallContainer或者Box做出了修改,但是你必须在problem7.txt文件中详述你的 修改并解释你这样做的原因。 正如以前一样,你的任务是实现这两个方法。在你开始实现getBallsFromSmallest()方法 前,你需要略读一下Iterator的文档(将光标放到上面,按下SHIFT-F2。),同样,请花些时 间回答下面的问题(你需要提交): 1实现 getBallsFromSmallest()时,存在很多的方法。和你的小组一起进行谈论,提出至少两 种方法,详细描述之。 2上面的两个方法中那一个你认为较好?为什么? 不存在单一正确的答案。这个练习的主要目的是帮助你在编码前要多做些思考,而不 是不经思考急于编码。请记住:多思考,少编码