2020年春季学期
计算机学院《软件构造》课程
Lab1实验报告
1 实验目标概述
本次实验通过求解四个问题(其中一个可选),训练基本Java编程技能,能够利用Java OO开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。另一方面,利用Git作为代码配置管理的工具,学会Git的基本使用方法。
基本的JavaOO编程
基于EclipseIDE进行Java编程
基于JUnit的测试
基于Git的代码配置管理
2 实验环境配置
从官网下载JDK1.8,eclipse ide及git,eclipse自带Junit4,lab0实验报告提供了诸多参考资料,未遇到明显困难。
Github Lab1仓库 的URL地址:https://github.com/ComputerScienceHIT/Lab1-1180300612
3 实验过程
3.1 Magic
Squares
该实验要求实现判断从文件读入的行列式是否为幻方,理解给定的生成幻方函数的算法,并判断其生成的幻方是否符合要求。
3.1.1 isLegalMagicSquare()
1.利用相对路径从给定的5个文本中读取数据
2.分两次切割数据并存入二维数组中
3.一个矩阵为幻方需要每行每列及两条对角线之和相同,只需要分别判断是否满足即可
4.有的数据会有更容易判断的方法,例如存在负数,非整数,或者不为矩阵(行列不等),我们可以在判断上面三种条件之前进行判断,可以节省成本
5.当矩阵满足三个条件就说明是幻方
3.1.2 generateMagicSquare()
1.为给定代码添加中文注释
2.当n为负数时会提示数据为负数,因为数组大小不能为负数
当n为偶数时则会提示数组越界,这是因为row在递增时会出现越界
3.添加try和catch语句即可
4.以相对路径进行存储
5.对产生的幻方进行测试
3.2 Turtle
Graphics
在给定的框架下,利用已经完成的类和函数完成部分未完成的函数,并通过Junit测试
3.2.1 Problem 1: Clone and import
从Github上下载zip,在本地解压后导入到eclipse的现有项目中
Git init 初始化仓库
Git 上创建ssh密匙
然后在github上添加密匙
在git上添加仓库的URL
3.2.2 Problem 3: Turtle graphics and drawSquare
画一个正方形
3.2.3 Problem 5: Drawing polygons
画多边形
计算角度
进行绘制
3.2.4 Problem 6: Calculating Bearings
计算转动角
根据提示利用math库中的atan2实现,需要注意的是计算结果小于0的情况
计算转动集
循环调用计算转动角的函数实现,初始方位记为0,将结果存入list中
3.2.5 Problem 7: Convex Hulls
求解凸包问题,根据提示使用gift-wrapping algorithm算法
1.创建两个数组来存储点的横纵坐标
-
选取初始点(横坐标最小且纵坐标最小)
-
将初始点添加到set中
-
选取与当前点转动角最小且距离最远的点加入set中,将current值加上转动角,将该点视作新的当前点重复操作,直到下一次选取的点为初始点
5.全部problem的Junit测试结果
3.2.6 Problem 8: Personal art
通过不断增长以及更换颜色,并每次旋转120度实现由内向外的螺旋三角图形
3.2.7 Submitting
先用add添加文件夹
然后用commit -m更新至本地仓库
最后用push推送到云端
3.3 Social
Network
要求实现一个无向图(但要求添加边需双向添加),可以加入点,加入边,且点名称不可重复,可以计算两点间的最短路径。
3.3.1 设计/实现FriendshipGraph类
用三个函数实现三个功能:增加点,增加边,计算两点间的最短路径
修改邻接表来增加边
增加点时判断是否重复名字
根据实验指导,通过广度优先搜索算法计算两点间的最短路径
3.3.2 设计/实现Person类
存储姓名,提供一个返回的功能
3.3.3 设计/实现客户端代码main()
仅在实验手册的基础上增加对邻接矩阵的初始化
3.3.4 设计/实现测试用例
测试加重复名的点
测试加边
测试计算两点最短距离
、
Junit测试结果