1.Magic Squares
两个任务。第一个任务:文件读入五个矩阵,对每一个矩阵,首先判断是否有非法输入(行列不等,存在小数,没有用\t分割数据等),然后判断矩阵是否为幻方(幻方定义是首先为方阵,其次行列,对角线之和均相等)。第二个任务:运用给出的方法生成n*n的幻方,文件输出,并进行判断。
1.1isLegalMagicSquare()
首先进行文件读入(注意IO异常处理)。运用BufferedReader相关库函数。读入后依次进行输入是否为空判断、输入行长度是否相等判断、数据是否以\t分割判断、输入数是否为整数判断、输入行列是否相等。
判断完成后将数保存在int型List中,而后依次取出存入Square。最后计算Square各行列、对角线数据之和,判断是否相等。
1.2generateMagicSquare()
按照劳伯法生成奇数阶幻方。劳伯法主要思想是把1(或最小的数)放在第一行正中;每一个数放在前一个数的右上一格;若该数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;若该数数所要放的格已经超出了最右列那么就把它放在最左列,上一行;若该数所要放的格已经超出了顶行且超出了最右列,则放在底行左列;若该数所要放的格已经有数填入,那么就把它放在前一个数的下一行同一列的格内。
流程图
同时对于n为偶数和负数的情况,在程序开头加入if判断即可。
2.Turtle Graphics
七个任务。首先需要获取源代码,然后创建和管理本地仓库。画正方形、据内角求边数、据边数求内角,画正多边形,计算方位,计算凸包,个性创作。
Problem 1: Clone and import
直接下载zip。下载完之后需要导入两个junit相关包。然后还有一些路径相关的错误需要手动改正一下。
上传github:运用git add *.*以及git commit -m “name” 以及 git push name等指令。
Problem 3: Turtle graphics and drawSquare
任务:让海龟走一个正方形的轨迹。
实现方式:进行四次循环,每次执行前进一次,转90°角一次,就可以画出一个正方形。(如上图)
Problem 5: Drawing polygons
任务:画出正n多边形。
实现方式:首先计算正多边形内角角度。角度为(n-2)*180/n。然后进行n重循环,每次转角角度为刚才计算出来的值。
例:sides=7时
Problem 6: Calculating Bearings
任务:计算从当前点到目标点所需的参数,并将当前方向作为附加参数。然后将其拓展到多点。最后进行测试 处理多个点之间的转角时只需要进行遍历并累加即可。
测试:
Problem 7: Convex Hulls
任务:对给定的点求凸包
方法:找到所有的点中最左下的点(这个点一定是需要的点),称为起始点。从起始点开始遍历所有的点,计算该点与起始点之间的距离与转角,选择最小的那个转角的点作为下一个起始点(如果有多个最小转角,选择与当前点距离最远的点作为下一个起始点)。选定下一个起始点之后将这个点从未选点集合中删除,加入已选点集合中。
测试成功。
Problem 8: Personal art
自行设计并绘制一个图案。数据和结果如下:
Submitting
方法:首先与远程仓库建立连接,而后commit,然后将commit的结果push到git上。
3.Social Network
任务:实现一个社交网络的无向图(未来可发展为有向图)。节点是人,边代表两人有社交。需要实现的函数是增加人(节点)、增加两人之间的关系(边)、求两人之间的距离(求最短距离)。
1.设计/实现FriendshipGraph类
该类具有两个属性.两个属性分别是People列表(用于保存每个人的名字以及社交关系)与nameSet(名字集合),nameSet主要是为了处理两个人重名的不合法输入情况。
addVertex方法是添加节点(将新的人加入社交网络)。需要更新people以及nameSet。
addEdge方法时添加朋友关系(单向)。只需更新p1的friends集合。
getDistance方法用的是BFS方法。用Map保存p1到各顶点的距离,用Queue保存将访问顶点集合。因为图中每条边都为1,因此使用BFS是最优的选择。代码如下:
2.设计/实现Person类
Person类中有两个属性,三个方法。属性为名字与朋友列表(friends,List类型)。三个方法分别是addFriend(加朋友),getName(获取名字),getFriends(获取朋友列表)。
3.设计/实现客户端代码main()
按要求使用了实验要求中的模板。先添加人,再添加关系,最后输出两人之间的距离。
4.设计/实现测试用例
测试了三个功能:addVertex, addEdge,getDistance
输入的图为: