哈工大软件构造Lab1
显然,菜是事实,这里只谈一点感想。
P1 MagicSquier
P1就是完全在学习Java的文件操作了。最先就是在C语言中完全不存在(也有可能是我才疏学浅)的 try-catch ,可以收集并返回各种各样的错误类型,其中就包括P1需要的文件打开错误(本次用比较宽泛的Exception e)。可以用一个 try-catch 包含方法 isLegalMagicSquare 中所有的指令,非常方便快捷。
- 经过一次蛋疼且失败又磨叽的实现尝试,放弃了只打开一次文件的想法。新的想法打开x.txt文件共三次:第一次计算第一行元素个数,第二次统计行数、比较行数和列数、将字符串转化为 int 型,第三次计算比较行列和对角线。
- 在打开文件方面,用 FileReader + BufferedReader 的套路,虽然不懂深层次的原理,但是经过我和舍友们若干次尝试,貌似这种方法更靠谱。
- 读取元素采用了实验指导建议的 readLine() + split("\t")。一方面 split 是真滴强,另一方面,在对于不标准n*n矩阵时,严格的按 “\t” 分割,计算得到的函数列数一定不相等。
- 关于方法 generateMagicSquare ,大一上半年的C语言SSE写过,解释丑拒。
P2 Turtle
在很长一段时间内,直到写完了足够多的方法,第一次运行后,才发现这个和海龟好像没什么关系。。。。。。
P2主要是根据已经实现的 TurtleGUI 实现画出一系列轨迹,及其相关的一些功能。
- 首先 drawSquare 就是对turtle类中提供的方法测试一下(居然只有这两个方法)
- 方法 calculateRegularPolygonAngle、calculatePolygonSidesFromAngle、drawRegularPolygon 用于计算正多边形内角,正多边形边数和画出正多边形。主要是对下面的方法提供一些支持。
- calculateBearingToPoint 和 calculateBearings计算从一点到另一点需要向右转的角度。值得一提的是,在我分五种情况讨论,将tan转化为需要的角度,实现了 calculateBearingToPoint 后,才发现有tan2这种东西。。。MD
- 关于 convexHull ,就是用了想法简单,复杂度超高的gift- warpping算法。从最左下的点开始,找与y轴夹角最小的点,并且根据两点距离去除点在凸包边上的情况,最后找回第一个点时停止。这个方法中对于 set 和 list 的使用很多,是P2的学习重点。