Lab_1实验总结(软件构造)

实验环境配置

一开始多次下载JDK,然后安装Eclipse均失败。在网上搜索尝试解决办法,最后发现是用了JDK9.0.最后卸载JDKEclipse并下载JDK8重新安装才得以成功。

Git在谷歌浏览器上也是多次下载被禁止,最后不得不使用IE浏览器才下载成功。

 Lab_1实验总结(软件构造)

实验过程

1.1 Magic Squares

对文本文件里给的能构成正方形的数进行检验,如果每一行与每一列的和均相等且对角线上的和也相等,那么我们就称其为幻方。

1.1.1 isLegalMagicSquare()

先将文本文件里的数读入一个足够大的一维数组,在读入过程中如果出现行列不等或者有负数、浮点数存在,则直接返回不是幻方。设定俩个变量allcmp,cmp储存第一行的和,all储存每一次加和的值并与cmp比较。两者不等,则返回变量judge的值被赋为false,表示不是幻方。

1.1.2 generateMagicSquare()

大部分由实验指导书给出,自己用了java.io.PrintWriter类来创建6.txt,方便在主函数中再一次调用isLegalMagicSquare()方法来判定6.txt是否为幻方。

1.2 Turtle Graphics

完善所给的TurtleSoup.java文件,在其中的每一个未完善的方法上方都会有注释来解释你所要完善的内容,解决了所有方法以后即可。

1.2.1 Problem 1: Clone and import

如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。

 Lab_1实验总结(软件构造)

点击GitHub中的绿色按钮即可下载,既可使用URL,也可以直接下载,还可以通过GitHub的客户端进行管理。三种方法我都试过,偏向于用GitHub的客户端,这样可以直接管理git仓库并上传到GitHub,实在是方便。

1.2.2 Problem 3: Turtle graphics and drawSquare

循环四次,每一次都是先forwardsidelength),在turn90),即可画出正方形

1.2.3 Problem 5: Drawing polygons

根据problem 4所给出的方法calculateRegularPolygonAngle(int sides),可以计算出每条边的内角度数。

problem 3总结出方法,有几条边就循环几次,也是先forwardsideLength),再turn180-calculateRegularPolygonAngle(sides))即可画出正多边形。

1.2.4 Problem 6: Calculating headings

一个较复杂的数学问题,先分为currentX==targetXtargetX>currentXtargetX<currentX,三大情况,再在每种情况下分别讨论targetY==currentYtargetY>currentYtargetY<currentY三种情况,用反正旋函数算出相对角度关系。

Lab_1实验总结(软件构造)

PS:角度处理用到(((相对角度关系-currentHeading)+360)%360)的小技巧来处理,避免了讨论相对角度与currentHeading谁大谁小的问题,着实方便不少。

 

分类讨论的具体代码

1.2.5 Problem 7: Personal art

先画一个正方形,turn20),递增sidelength,循环18次。

重置sidelength,画正五边形,turn20),递增sidelength,循环18次。

直到正八边形。

1.2.6 Submitting

 Lab_1实验总结(软件构造)

点击右边open this repository打开git本地仓库,直接将编辑好的文件放入其中。

 Lab_1实验总结(软件构造)

接着改变就会出现在客户端中,编写Summarydescription,并点击commit to master

 Lab_1实验总结(软件构造)

这时再点击Push origin即可同步到GitHub

 

1.3 Social Network

本质上就是实现Java上的数据结构,用图来表示人与人之间的关系。

1.3.1 设计/实现FriendshipGraph类

maplist创建数据域relation,用来储存人还有他的关系链。

addVertex方法即首先判定是否有重名,然后再加入他和他的关系链。

addEdge方法即首先遍历检查两人之间是否已存在边,如果没有就添加进去。

getDistance方法中每条边的长度都是单位长度,直接使用DFS算法即可解决。

1.3.2 设计/实现Person类

Person类用于描述每个成员的姓名,故只需要数据域不需要方法。

1.3.3 设计/实现客户端代码main()

在实验指导中给出了main()。

1.3.4 设计/实现测试用例

尝试编了一些用例。

Lab_1实验总结(软件构造)