软件构造实验一总结

软件构造实验一总结
本次实验虽说是为了让我们熟悉java,JUnit和git但也有东西是可以说一说的。

P1Magic Squares(幻方)

要求一
要求判定一个矩阵是不是一个幻方,并对其中的各种异常做出不同的反应。
对于判断矩阵是不是幻方的函数就按照实验手册里的要求遍历就好,然后在各种出错的情况下做出相应的反应,我这里就是直接在控制台输出错误原因了。所以P1主要让我们熟悉如何读取文件,如何输入输出,以及各种常用语句。

这里就说说文件读入吧:
Java.io包里含有几乎所有的操作输入和输出需要的类,并且主要的都是流输入输出。
对于文件读入,这里我用的就是FileInputStream。
在这里插入图片描述
这里的文件路径用的是相对路径。
之后就用readline()方法逐行读取就可。
以下是运行结果
在这里插入图片描述

对于要求二,给了一个generateMagicSquare函数,它的作用就是构建一个奇数阶幻方。
构建方法就是罗伯法。还有一个口诀来说明这个方法。
一居上行正中央:数字 1 放在首行最中间的格子中;
依次斜填切莫忘:向右上角斜行,依次填入数字;
上出框时向下放:如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中;
右出框时向左放:同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中;
排重便在下格填:如果数字n右上的格子已被其它数字占领,就将n+1 填写在n下面的格子中;
右上排重一个样:如果朝右上角出界,和上面重复的情况做同样处理。

对于实验指导书中的两种异常:
当输入为偶数时会发生数组越界的异常:当右上角已经有数字的时候,需要往下一行继续写数字,而偶数阶的时候会发生下一行越界的情况,故会发生异常。
当输入为负数时会发生数组下标为负的异常

函数扩展的话,就在函数头加一个判断n的语句就行

P2 Turtle Graphics

P2中的海龟图形是用来画图的,网站上分两部分,第一部分的4个问题就是告诉我们实验工具用法以及git教学,第二部分是主要代码编写。

这个实验难点就是问题七凸包
计算凸包的算法现在主流有Graham扫描法和Jarvis步进法,我这里用的就是Graham扫描法。
先找到最左下角的点,然后逆时针旋转找点,我这里还用了之前的计算旋转方向的函数。
首先从第一个点开始的话,起始方向为90度,即朝向x轴正向。
然后开始找第二个点,找到从第一个点到其他点的旋转度数,最小的那个就是第二个点,然后把朝向改成第一个点指向第二个点的射线的度数。
之后就递归上一步,直到回到第一个点。

好玩的问题八来了(人人都可以是带艺术家)
利用上面的函数自己画一个图。这里还学到了枚举的用法。
以下是我画的图(献丑了)
在这里插入图片描述

总的来说,P2告诉了我们git的基本用法,还给我们一些容器的用法,最后还用了枚举。其他的就是算法上面的教学了。

P3 Social Network

P3构建一个人际关系网,用到了有向图。但由于没有图的数据类型,就只好用集合来构造图。(为lab2埋下伏笔)

首先是Person类,我构建的图里的每个点就是一个person,由于是有向图,我的边集没有直接放到FriendshipGraph类里,而是把边放到了起始点的边集里,所以我的person类中除了name还有一个边集。然后对于后来的广度优先搜素,还有dis表示距离和visited表示是否访问过。

其次是FriendshipGraph类,包含了三个方法addVertex,addEdge和geDistance,分别是加一个点,加一条边,和计算两个人之间的距离。
addVertex要考虑该点已经在图中的情况。
AddEdge要考虑该边的两个点是否都已经在图中,以及这两个点是否不同,和这条边是否已经存在。
getDistance要考虑的就是这两个点是否在图中

然后最关键的就是JUnit测试,用来测试每一个函数的功能,还要满足覆盖率。

总的来说,这次实验的每一个问题都不是特别难,主要就是为了让我们熟悉java编程,git操作,以及Junit测试。好为下一个lab做铺垫。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值