软件构造实验1总结

目录

1 实验目标概述 1
2 实验环境配置 1
3 实验过程 1
3.1 Magic Squares 1
3.1.1 isLegalMagicSquare() 1
3.1.2 generateMagicSquare() 1
3.2 Turtle Graphics 1
3.2.1 Problem 1: Clone and import 2
3.2.2 Problem 3: Turtle graphics and drawSquare 2
3.2.3 Problem 5: Drawing polygons 2
3.2.4 Problem 6: Calculating Bearings 2
3.2.5 Problem 7: Convex Hulls 2
3.2.6 Problem 8: Personal art 2
3.2.7 Submitting 2
3.3 Social Network 2
3.3.1 设计/实现FriendshipGraph类 2
3.3.2 设计/实现Person类 2
3.3.3 设计/实现客户端代码main() 2
3.3.4 设计/实现测试用例 3
4 实验进度记录 3
5 实验过程中遇到的困难与解决途径 3
6 实验过程中收获的经验、教训、感想 3
6.1 实验过程中收获的经验和教训 3
6.2 针对以下方面的感受 3

1实验目标概述
本次实验通过求解三个问题,训练基本Java编程技能,能够利用Java OO开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。另一方面,利用Git作为代码配置管理的工具,学会Git的基本使用方法。
基本的Java OO编程
基于Eclipse IDE进行Java编程
基于JUnit的测试
基于Git的代码配置管理
2实验环境配置
首先在老师提供的地址上下载了最新版本的eclipse和jdk,后来看到实验要求jdk11,于是又下载了jdk11,根据提示一步步安装即可。然后在电脑->属性->高级系统设置->环境变量里配置好环境。由于Git在大一就已经安装过,因此无需再次安装。

在这里给出你的GitHub Lab1仓库的URL地址。
https://github.com/ComputerScienceHIT/HIT-Lab1-190110513
3实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
3.1Magic Squares
这个部分要求我们先从五个文件读入数据,然后判断是否是幻方。在根据输入的数字产生幻方,并将数据写入文件。
3.1.1isLegalMagicSquare()
首先创建一个输入输出流BufferedReader来从文件中读取数据。
在这里插入图片描述
在这里插入图片描述

然后通过readline函数一行行读取数据,并通过split函数将这一行数据按照空格符分隔开,然后放入String数组中。再将数组的字符转化为数字存储在矩阵中。
在这里插入图片描述

然后比较每一行的元素个数是否相等,以及行数和列数是否相等。
之后先计算第一行的和,作为判断是否是幻方的标准。之后通过循环计算出两条对角线的和以及各行各列的和,判断它们是否和第一行的和相等。
如果之前的判断均相等,则该矩阵是幻方。
3.1.2generateMagicSquare()
首先利用实验指导里给出的函数产生幻方,然后利用字符输出流PrintWriter来将产生的幻方输出到文件中。

在主方法中调用Scanner函数来输入n,以此决定幻方的阶数。并判断输入是否合法。然后调用isLegalMagicSquare()函数判断是否为产生的是否是幻方。
3.2Turtle Graphics
这部分要求我们在clone的程序的基础上,实现一些函数的功能,包括画图,解决数学问题等。最后利用函数自己设计并画出一张更复杂的图。
3.2.1Problem 1: Clone and import
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
首先选择一个文件夹作为仓库,然后点击右键,选择Git Bash Here,然后输入git clone https://github.com/rainywang/Spring2021_HITCS_SC_Lab1/tree/
master/P2就可以将相应的文件下载到该仓库里。之后将下载的文件导入到eclipse中即可。
使用git init命令可以初始化本地仓库。

3.2.2Problem 3: Turtle graphics and drawSquare
该函数需要实现的功能是画出指定边长的正方形。执行四次前进后旋转90度的指令即可实现该功能。
3.2.3Problem 5: Drawing polygons
该函数需要实现的功能是计算已知边数的正多边形的内角,相应的公式是360-180/边数。在函数中实现即可。
3.2.4Problem 6: Calculating Bearings
首先calculateBearingToPoint函数需要实现的功能是计算从当前朝向角度转到起点和终点连线所需要的角度。
首先使用Math.atan2函数计算两点之间的边在坐标系的角度,减去当前朝向的角度;
然后取相反数(海龟旋转的方向是顺时针,坐标轴角度的旋转角度的逆时针);
再减去90°(海龟的0°线是向上,坐标轴的0°线是向右,向右到向上要逆时针旋转90°);
最后调整为0-360°之间(可能大于360°或小于0°)。

而calculateBearings函数要实现的是计算并保存从第一到第n个点每次需要转动的角度。
将“起点”选为第一个点(坐标为(xCoords.get(0),yCoords.get(0)));
循环n-1次(n为点的个数)
每次将第i+1号点设置为“终点”,通过上一个函数计算旋转角度并存储到List中;
将下一次的“起点”用当前“终点”更新,继续循环;
退出循环后返回List。
3.2.5Problem 7: Convex Hulls
该函数需要实现的功能是解决凸包问题,先选出最左边的点,如果横坐标相等则再选择最下方的点作为第一个点,加入记录结果的表中。然后再选择不在表中的剩下的点中与该点的连线与横轴夹角最小的点(如果角度相同则选择与该点距离最大的点)作为下一个点,加入记录结果的表中。继续循环直到最后一点与第一个点重合,此时表中所保存的节点即为所求的结果。
3.2.6Problem 8: Personal art
本人的图如下
在这里插入图片描述

3.2.7Submitting
如何通过Git提交当前版本到GitHub上你的Lab1仓库。
在C:\Users\Lenovo\eclipse-workspace\Lab1-190110513目录下通过右键打开Git Bash Here,然后通过git init初始化本地Git仓库,然后用git remote add origin链接到自己的github仓库。然后用git config --global user.name “xxx”和git config --global user.email “xxx@qq.com”认证身份。之后用git add .和git commit -m “xxx”(“xxx”代表备注),最后用git push -u origin master上传到对应的github仓库。
在这里插入图片描述

3.3Social Network
该部分是要建立一个人际关系图,并通过该图计算人与人之间的距离。
3.3.1设计/实现FriendshipGraph类
在FriendshipGraph类里先定义一个GraphNode类,这个类里面有四个成员变量,分别是Person、neighborList、distance和visited,分别表示图中的人、人的邻接节点、这个人与终点的人的距离、这个人的节点是否被遍历过。
再定义一个Edge类,用来表示边。
再定义addVertex方法和name集合,调用addVertex方法后,对应的人名会加入name集合中。
再定义addEdge方法,用于加入边,调用该方法时,参数1(Person a)的neighborList中会加入参数2(Person b)。
最后定义getDistance方法,该方法使用广度优先遍历求解两人间的最短距离。
在这里插入图片描述

3.3.2设计/实现Person类
共有两个成员变量,分别是Name和node,分别代表名字和对应的图中节点。
3.3.3设计/实现客户端代码main()
将实验指导书中的图的例子代码放入main中实现。

3.3.4设计/实现测试用例
调用assertEquals方法测试函数的返回值是否正确。
先用实验指导书上的简单例子测试,之后自己实现更复杂的图进行测试。

4实验过程中遇到的困难与解决途径
遇到的困难 解决途径
对Java的语法和各种方法以及数据类型不太了解。
在图书馆借书查阅学习。
对eclipse的使用不了解。
查阅实验指导书以及上面提供的学习资料学习。向助教请教。
对git的使用不了解。
向学长请教,查阅网上资料

6实验过程中收获的经验、教训、感想
6.1实验过程中收获的经验和教训
6.2针对以下方面的感受
(1)Java编程语言是否对你的口味?
还好,大一时候有一定接触和了解。
(2)关于Eclipse IDE;
比较容易上手使用,比较方便。
(3)关于Git和GitHub;
之前没有基础,需要花费一定的精力去了解和学习。
(4)关于CMU和MIT的作业;
对于初学者来说有一定的难度,但通过请教和查阅资料还是可以完成。
(5)关于本实验的工作量、难度、deadline;
工作量中等,难度中等,deadline很友好。
(6)关于初接触“软件构造”课程;
加深了我对Java语言的了解,对于eclipse以及git的使用都有了初步的了解,使我受益匪浅。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值