HIT 软件构造Lab1实验总结

前言

其实写这篇的时候我刚lab2做完了,当时写完lab1休息了几天又开始了lab2,相比较下来lab1简直是。。。怎么说呢,工作量少很多吧。不过还是有不少的感悟可以说一下的。

Magic Squares

总的来说幻方这个任务不太难,java有很多很方便的方法,相比较c语言,简直是省了一大笔劲。

难点:读取字符串然后解析成数字。
我们根据spec,要从文本中读入内容,java中读取文本你的方法有很多,我这里使用的是BufferedReader ,并且每次只读入一行内容,所以可以用个循环来一直读,每读一次,都要对字符串进行解析,将其转化为数字存储在数组中。我在其中也有加入一些判断,判断是否满足幻方,是否存在非数字输入。

这个将字符串转成数字的方法还是特别好用了,以后会经常用到。

Turtle Graphics

P2就比P1有意思多了,内容上比幻方问题好有趣,要求实现画图功能。

前几个函数其实都是中学的数学题,实现几个简单的计算就可以完成。根据方法的spec编写代码。

难点:凸包问题
凸包问题,我在做这个实验前也不知道什么是凸包问题,想了解的小伙伴们可以去问问度娘,大概就是找一个点集,这个点集里面的点的连线能够把整个图的所有点都包括在内。在CSDN上有很多博客都描述了这个问题的解法,我记得我当时也看了好几种,其中最好理解的一种就是边界漫游法,很通俗易懂。
边界漫游法,也就是通过计算找到最外围的一个点,以这个点为起点,找和它夹角最大的点,这个点就是要找的凸包的点,若有相同的情况就判断这两点到这一点的距离,远的那个加入到凸包的点集中,再以这个点为新起点,重复上述操作。当回到一开始的起点的时候,也就结束了,找全了。这就是为什么前面要实现计算Bearing方法的原因了,都是为了求凸包做准备。代码是我自己写的,仅做参考:

public static SetPoint> convexHull(SetPoint> points) {SetPoint> convexHullPoint = new HashSetPoint>();Point startPoint = null ;double currentBearing ;double nextBearing ;double Bearing ;double nextLength ;Point currentPoint ;

来源:达不溜溜球

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月10日
下一篇 2020年3月11日

相关推荐