软件构造Lab1记录
Last Update:
Word Count:
Read Time:
软件构造Lab1记录
实验目标概述
本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
* 基本的 Java OO 编程
* 基于 Eclipse IDE 进行 Java 编程
* 基于 JUnit 的测试
* 基于 Git 的代码配置管理。
实验环境配置
- IntelliJ IDEA 2022.1
- JDK11
- Maven 4.0.0
- Junit 4.12
- URL:https://github.com/ComputerScienceHIT/HIT-Lab1-2021112107.git
实验过程
Magic Squares
第一,设计算法来识别输入的矩阵是否是幻方,要保持正确性和健壮性;
第二,分析所给代码,画流程图,找出偶数负数报错的原因,并且把输入的矩阵保存为 6.txt,再用第一个问题中所设计的矩阵进行测试。
isLegalMagicSquare()
过程:
- 读取文件,如果找不到文件,提示错误信息,返回 false
- 判断文件中的元素是否用\t 分开,如果不是,提示错误信息,返回 false
- 判断元素是否全是正整数,如果不是,提示错误信息,返回 false
- 判断矩阵行列数是否相等,如果不相等,提示错误信息,返回 false
- 判断矩阵是否完整,如果缺项,提示错误信息,返回 false
- 累加各个行、列、对角线的所有元素和,比较是否相等:如果其中两个不相等,提示错误信息,返回 false;如果全相等,提示是幻方,返回 true
1 |
|
generateMagicSquare()
过程:
- 解释该函数如何生成 n×n 的幻方
给出注释
分析为何输入负数或者偶数时,会提示错误
在输入负数或者偶数时,提示错误信息,并返回 false
将生成的矩阵保存为 6.txt,并用 3.1.1 设计的函数中测试它。
1 |
|
Turtle Graphics
该任务分为几个部分:首先要求学会从 github 上下载代码,然后要求利用已有的方法来绘画,包括画正方形,画正多边形,已知当前角度、起点、终点判断需要转过的角度,凸包问题,画出自己想画的图形。最后要求提交代码到 github上。
Problem 1: Clone and import
从 GitHub 获取该任务的代码:通过实验指导手册找到该任务的网站然后点击 Clone or download 后,再点击Download ZIP 即可
在本地创建 git 仓库、使用 IDEA 集成的 git 管理本地开发。
Problem 3: Turtle graphics and drawSquare
利 用 Turtle 类 中 给 的 forward(units) 和 turn(degrees) 方 法 , 来 完 成 drawSquare(Turtle turtle, int sideLength)方法,最后的输出要是一个正方形。实现方法很容易,先走 sideLength,顺时针转向 90,再走 sideLength,顺时针转向 90,然后走 sideLength,顺时针转向 90,最后走 sideLength 即可。
Problem 5: Drawing polygons
double calculateRegularPolygonAngle(int sides); 这个方法是根据正多边形的边数计算出多边形的内角公式是 double angle = 360 – 180/sides;
int calculatePolygonSidesFromAngle(double angle);这个方法是根据正多边形的内角计算出边数 公式是 int sides = Math.rint(180/(360 – angle));
void drawRegularPolygon(Turtle turtle, int sides, int sideLength);这个方法是根据给定的多边形边数与边长画出一个正多边形
Problem 6: Calculating Bearings
实现 calculateBearingToPoint 方法题意是:给定当前的转角(与 y 轴正向夹角,顺时针为正),当前位置,目标位置,求出到目标位置所需要的转角。
实现 calculateBearings 方法 题意是:给定一个 x 坐标的列表,y 坐标的列表,组合为一些坐标位置,求出从上一个坐标位置到下一个坐标位置所需要的转角。
Problem 7: Convex Hulls
给定一些点的集合,求出这些点的凸包。通俗来讲,就是求出包围所有点的最小点集合。
Problem 8: Personal art
题目要求是:画一个自己想要的图形
Submitting
将本地项目文件连接到 github 指定仓库后,通过 IDEA 的提交与推送上传至github。
Social Network
建立一个图,来搭建社交网络,能实现添加点、边、求最短路径等操作。设计并实现 java 程序,包括 FriendshipGraph 类,Person 类,main()以及测试用例。
设计/实现 FriendshipGraph 类
addvertex 函数:需要注意的是重复添加人名要返回错误信息;在此函数中扩展人名列表;图的矩阵要扩展,新的一列和新的一行除了对角线为 0,其他全为-1。
addEdge 函数:需要注意自身不能与自身建边;两个人重复建边以最新的为准;不能与不存在的人建边。
getDistance 函数:需要用 bfs(宽度优先搜索)来对两个人之间求距离,注意与不存在的人之间距离为-1;不可达的两个人之间距离为-1;自身到达自身距离为 0;
设计/实现 Person 类
1 |
|
设计/实现客户端代码 main()
1 |
|
设计/实现测试用例
对于 addvertex 函数要测试正常添加一个人(true)与重复添加一个人(false);
对于 addEdge 函数要测试两个人正常建立关系(true)、一个人与自己建立关系(false)、两个人重复建立关系(以最新关系为准)、不存在的人名(false);
对于 getDistance 函数要测试不可达关系、自身到达自身的距离、一个可达关系的距离、不存在的人名(false)。
实验过程中收获的经验和教训
- 学习新的编程语言时候,要学会与之前学过的语言进行类比
- 遇到不会的英文单词一定要立马查,不要靠猜词义,很容易理解错误