1.Magic Squares
主要任务是判断矩阵是否为幻方。
1.1isLegalMagicSquare()
该部分大致分为以下几个步骤:
1.将文本读入,由此,我们可以得到行数row;
2.由于读入是按行读入的字符串,可以利用split()判断是否使用“\t”分割,以及得到列数,判断行列数是否相等;利用contains()判断是否有负数与小数;从而判断读入的矩阵是否合法;
3.利用循环,得出每行每列对角线之和,判断其是否相等,从而得出该矩阵是否为幻方
1.2generateMagicSquare()
首先,用户输入生成矩阵的宽度,若输入负数或偶数,则返回false;若是输入数据合法,则按照代码所示规则进行填写:
从第一行的中间开始向右上方填写,填写数字从1至n*n;填写到第一行后跳转到最后一行,填写到最后一列时跳转到第一列;每填写n个数向下移一行;直至填写完成;最后将生成的幻方写入文件并利用上一步的函数检测其是否为幻方。
出现如图所示的报错信息,第一个是数组越界,第二个是负数,因此出现错误;
注释如图所示:
流程图如图所示:
2.Turtle Graphics
了解turtle中的一些函数,利用这些函数进行前进、旋转、涂色从而实现所需功能。
2.1 Problem 1: Clone and import
复制链接在浏览器中打开,克隆所需内容至本地并且移进本地仓库。本地仓库的建立则根据教程完成。
2.2 Problem 3: Turtle graphics and drawSquare
绘制一个正方形,代码比较简单,前进边长然后旋转90度,重复四次即可。
2.3 Problem 5: Drawing polygons
绘制多边形,该部分包含两个函数。
第一个函数是根据边数计算内角大小:所有正多边形外交和为360度,通过(360/边数),可以计算获得外角大小,再用(180-外角)即为所求内角大小。
第二个函数是根据内角大小求边数:与上述过程刚好相逆,先用(180-内角)求出外角大小,在用(360/外角)求出边数,这里需要注意的是,角度类型为double,所以所求边数需要先四舍五入,强制类型转换,转化为int型。
绘制多边形,首先通过边数求出旋转角度(即外角),前进边长然后进行旋转,重复边数次。
2.4 Problem 6: Calculating Bearings
第一个函数:通过反三角函数计算出该向量与y轴的角度,再减去初始角度即可。注意:这里说的角度是顺时针角度,其次,返回角度值大于等于0,小于360;
第二个函数:从第一个点到第二个点,默认初始角度为0,之后每一次循环的初始角度,都是之前所的角度的累加值,利用第一个函数进行循环,即可得出答案。
2.5 Problem 7: Convex Hulls
该部分为凸包问题,首先寻找到最左下方的点(一定在凸包上的点),之后依次遍历,寻找到偏转角最小的点,若偏转角度数相同,寻找最远的点。最后将这些点返回。
2.6 Problem 8: Personal art
我设计的图形如下:
2.7 Submitting
首先将所需文件复制到个人仓库中,利用git add ./git commit/git push等指令将文件上传到GitHub。
3.Social Network
利用点代表人,是否有边代表人与人是否认识,从而获取关系图,最后通过函数计算两点之间的最近距离。
3.1 设计/实现FriendshipGraph类
首先创建一个节点类,每个节点代表一个人,创建一个名字列表,存入所有人的名字;添加节点时,如果与已有名字重复则退出,否则新建一个节点,将这个人存入;添加边时,在person列表中找到对应的节点,然后插入链表中;在计算两个结点的路径中,将一个点设为起点,另一个点为终点,采用bfs 算法,将起点加入队列(distance为0),队列头出队列并将其相邻的点入队(distance值为出队点distance值+1),并且设为已访问,直至终点入队,从而得出结果。
3.2 设计/实现Person类
Person类比较简单,大概有四个功能:1.将节点添加至person类;2.返回节点的名字;3.添加好友;4.返回好友列表。
3.2 设计/实现客户端代码main()
首先创建四个对象,创建结点将其存入,加入无向图,最后求得两结点之间的距离。
3.4设计/实现测试用例
首先通过创建对象测试addVertextest();加入无向图边测试addEdgetest(),最后计算两结点之间的距离测试getDistancetest()。