目录
Problem 3: Turtle graphics and drawSquare
Problem 6: Calculating Bearings
本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开
发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够
为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。
另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
l 基本的 Java OO 编程
l 基于 Eclipse IDE 进行 Java 编程
l 基于 JUnit 的测试
l 基于 Git 的代码配置管理
简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给出屏幕截图。
本次实验在IDEA中开发和运行以及测试,所使用的JDK版本为JDK11
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
配置过程中,因为原来我所使用的JDK版本为16,所以需要到官网上重新下载JDK11,所以过程比较繁琐。
根据实验要求,所配置的JUnit为JUnit4,配置方法是根据老师所给的链接按教程配置,过程没有遇到什么困难。
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
在这里简要概述你对该任务的理解。
该任务有两个方面:第一个方面就是判断一个二维矩阵是否符合幻数魔方,所谓幻数魔方就是纵横斜的和都相等,这个要求主要考察我们编写程序的基础能力以及搜集课外资料了解抛出异常的机制;第二个方面就是生成一个幻数魔方,这个要求就是不能为偶数的行和列或者带有负数的行和列,所以我们需要注意生成的幻数魔方必须符合上述要求,其次还是查阅课外资料,对抛出异常有一定的了解。
按步骤给出你的设计和实现思路/过程/结果。
程序设计的思路为:首先要读取文件,对每一行进行判断,并且每一行之间数与数是以制表符”\t”隔开,如果不符合就抛出异常。其次,将文件中的数字保存到一个二维数组中,先判断每一行和每一列相加是否相等,再从对角线进行判断。除此之外,还有一个验证数组,用来判断行与行之间或者列与列之间是否相等,因为方法的类型为boolean,所以最后方法返回的一定是true或者false,在输入的情况不受控制的情况下,我们抛出一个异常。
按步骤给出你的设计和实现思路/过程/结果。
首先要初始化二维矩阵,其次判断输入的n是否符合要求,再依次填充二维矩阵,最后以文件的形式输出
在这里简要概述你对该任务的理解。
该任务主要是clone已经有的代码,并且自己根据任务需要写方法完成任务,并且使用JUnit对代码进行测试
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
首先从官网上下载Git需要的组件,其次在本地使用.git命令建立一个本地Git库,然后使用git remote + URL建立远端链接,再使用git clone + URL的命令将需要的代码克隆下来
这个方法需要实现已知边长的正方形,将画笔颜色设置为黑色,旋转角度为90就可以得到想要的正方形
这个问题为在已知正多边形变数的情况下计算正多边形的内角度,通过数学公式可以知道为180 - 360 / sides
除此之外,还希望我们画一个正多边形,我们可以类似3.2.2画正方形的方法画一个正多边形,利用calculateRegularPolygonAngle的功能计算出多边形内角,再用180°减去这个值即可
通过JUNit测试
该问题首先希望解决,已知起点和当前朝向角度,想知道到终点需要转动的角度。例如,如果海龟在(0,1)朝向 30 度,并且必须到达(0,0)它必须再转动 150 度。
首先使用Math.atan2函数计算两点之间的边在坐标系的角度,减去当前朝向的角度;
然后取相反数(海龟旋转的方向是顺时针,坐标轴角度的旋转角度的逆时针);
再减去90°(海龟的0°线是向上,坐标轴的0°线是向右,向右到向上要逆时针旋转90°);
最后调整为0-360°之间(可能大于360°或小于0°)。
同样地,通过JUnit测试
第七个问题为凸包问题,凸包(Convex Hull)是一个计算几何(图形学)中的概念。
在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点( X1 ,. . . ,Xn )的凸组合来构造。在二维欧几里得空间中,凸包可想象为一条刚好包着所有点的橡皮圈。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。凸包问题:给定点集,求构成凸包的点。
同样的,通过了Junit测试
如何通过Git提交当前版本到GitHub上你的Lab1仓库。
首先使用cd命令到当前目录,然后使用git add *.* 命令把所有文件到待加载步骤,再用git commit提交到本地文件库,然后使用git remote + URL与GitHub远程连接,再使用git push + 远程库名字 + 分支名字命令提交到GitHub
在这里简要概述你对该任务的理解。
该任务主要是设计Friendship和Person两个类,能够满足一张社交网络的有向图,并且能计算人与人之间的社交距离。
-
-
-
设计/实现FriendshipGraph类
-
-
给出你的设计和实现思路/过程/结果。
这个类主要分为三个部分:
- 构造社交网络图的点,可以写一个方法addVertex(Person p)实现,根据不同人的名字在有向图中构建一个点,并且可以检测名字是否相同,就会报错并且推出程序
- 构造社交网络图中的人际关系的边,写一个方法addEdge(Person x, Person y)实现,要同时将两个点的出边和入边相连接才是合理的,因为这里默认人与人的认识是相互的(当然你也可以设置成单方向的),将每个相互熟识的人连接在一起,连接成一张社交网络图。(这部分的主要设计可以依靠Person类),并且还能叫检查是否真的有这样的人存在!
- 最后一部分是要计算人与人之间的社交距离,可以用DFS算法来计算,,并且设计为方法getDistance(Person x, Person y)当这两个人没有边的连接时,它们之间的距离为-1,这个人和自己的社交距离为0
-
-
-
设计/实现Person类
-
-
给出你的设计和实现思路/过程/结果。
这部分主要分为三部分,第一部分就是这个人自己的名字p_name,其次就是他的朋友列表,我们用数组friends表示,最后就是写一个方法判断是否是这个人的朋友IsFriendOf(Person p),并且设置了一个集合类,用来判断名字是否重复
-
-
-
设计/实现客户端代码main()
-
-
给出你的设计和实现思路/过程/结果。
设计思路是根据实验ppt来实现,首先构建一个图,把每个人的名字作为顶点加入到有向图中,其次根据ppt的示例给相应的顶点连接一条边,最后调用getDistance(Person x, Person y)方法计算两个人之间的社交距离
给出你的设计和实现思路/过程/结果。
测试用例还是分为三个部分:
- 测试addVertex,主要是依靠断言语句判断输入的名字是否能加入到顶点中
- 第二部分就是测试addEdge(Person x, Person y)方法,主要是用断言语句判断两个点之间的连接关系
- 第三部分就是测试方法getDistance,还是根据ppt上的例子来进行测试,Rachel和Ross之间的距离为1,Rachel和Ben之间的距离为2,Rachel和Rachel之间的距离为0,Rachel和Kramer之间的距离为-1
我还额外测试了一组自己假想的社交网络