软件构造临近末尾,开始准备复习。借助猴子摘香蕉,复习一下最基础的对象、类相关知识(规约、AF、RI等不包括)
猴子摘香蕉题目:一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等)。设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态下(设猴子位置为A,香蕉位置在B,箱子位置为C),如何行动可摘取到香蕉。
主要思路:将房间抽象为一个无限大的二位空间。初始猴子、香蕉、箱子位置可以程序内默认,也可以手动输入(这里采用的是程序内默认,猴子在(0,0),香蕉在(10,10),箱子在(20,5))
代码编写:一个main函数,三个类(猴子类,香蕉类,箱子类)
香蕉类和箱子类较为简单,只有两个field,用来表示x和y,合起来即为其二维位置
猴子类除了x和y之外,还用到了四个方法:
monkeymove表示猴子移动到某个位置
movebox表示猴子推动箱子,要求猴子必须与箱子距离为1。满足条件后,优先推动直至箱子与香蕉x相同,再对y推动
monkeyclimb表示猴子登上箱子,要求猴子和箱子距离为1
getbanana返回一个布尔值,当猴子,箱子,香蕉位置相同时,说明猴子取得香蕉
主程序分别讨论猴子,箱子,香蕉相对位置指定相应步骤,最终通过getbanana函数判断这些步骤是否能让猴子取得香蕉。
最后main函数通过if嵌套判断猴子箱子香蕉相对位置即可。
总结:
对于java初学者而言,做做这种简单的项目还是很好的。不用要求写的代码很规范,规约等等全部写进去,只要能实现主要功能即可。对于熟悉代码结构,复习类与对象相关知识有着很大好处