目录
3.1.2 generateMagicSquare(). 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
本实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开 发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够 为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。 另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
⚫ 基本的 Java OO 编程
⚫ 基于 Eclipse/IDEA IDE 进行 Java 编程
⚫ 基于 JUnit 的测试
⚫ 基于 Git 的代码配置管理
实验环境是课程开始前配置好的,之前的项目经历需要Java环境以及git和GitHub。
GitHub Lab1仓库的URL地址:https://github.com/ComputerScienceHIT/HIT-Lab1-1190200924。
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
Magic Squares指的是一个正矩阵且矩阵的每行、每列以及对角线的和相等。即n阶Magic Squares便是指n×n的 一个矩阵且该矩阵的每行、每列以及对角线的和为一个常数且相等。
此函数要求实现的功能是判断一个各元素已知的矩阵是否为Magic Squares。
这部分具体的任务是对提供的5个(.txt格式)矩阵进行判断,逐个判断是否为满足要求的Magic Squares。首先程序要将目录文件夹内的矩阵(.txt格式)文件读入到程序中,并存储到二维数组中,并在读入的过程中计算待判断矩阵的阶数。
将待判断矩阵(.txt格式)读入程序数组后,便要判断该矩阵是否为Magic Squares。判断标准如下:
- 判断目标矩阵是否为正矩阵(即行数与列数相等);
- 若满足上一步,则计算矩阵的第一行之和,并将其结果作为参考标准;
- 使用循环的结构便利计算每行、每列以及对角线之和,并与ans做比较,若出现与ans不相等的情况,则return false;
- 若满足Magic Squares的各项要求,则return true。
将已给出的5个矩阵输入程序,得到的结果为(红色字体为false的错误提示信息):
此函数要求按照输出的阶数int n生成一个n阶的Magic Squares,并输出存储到6.txt文件中。
整个n阶的Magic Squares生成程序在实验手册中已给出,生成程序的整个程序逻辑为:
生成要求的n阶Magic Squares后,要将magic二维数据所存储的Magic Squares矩阵改变输出流,输出到6.txt文件中。
输出到终端和文件中的结果为(判断为true):
终端的输出
6.txt中的输出
根据给出的代码及其注释,对代码的函数进行补全,实现各个函数的具体功能。完成各个基本绘图函数的功能后,利用这些基础的绘图函数,编写属于自己的个性化代码,绘制出自己设计的图形。
从GitHub获取源码:进入使用手册给出网址,然后下载。
从本地创建git仓库:
(1)git init 初始化本地仓库
(2)git add remote 添加远程库源
(3)创建master分支
(4)git pull origin master 将远程仓库同步到本地
(5)git add * ——> git commit -m ——> git push 将本地文件加入到本地仓库,将本地仓库同步到远程仓库
-
-
- Problem 3: Turtle graphics and drawSquare
-
首先,forword(int sidelength)方法是将turtle前进距离sidelength,turn(double degrees)是将turtle的前进方向顺时针选择degrees度。故要想此函数实现画出一个正方形的功能,只需要在turtle每次调用forward方法后调用turn方法旋转90度即可,可利用循环结构实现。
绘制四边形的结果:
- 补全calculateRegularPolygonAngle函数的代码,根据已知条件正多边形的边数计算正多边形的内角度数。
- 补全calculatePolygonSidesFromAngle函数的代码,根据已知条件正多边形的内角度数计算正多边形的边数。
(3)补全drawRegularPolygon函数的代码,根据给出的正多边形边数画出指定的正多 边形
正八边形的测试结果:
- 补全calculateBearingToPoint函数的代码,该函数功能为计算当前点朝向的向量与当前点朝向目标点构成的向量之间的夹角。
- 补全calculateBearings函数的代码,该函数的功能为对列表中的每两个相邻点调用calculateBearingToPoint函数计算夹角,保存到列表中并返回。
补全convexHull函数的代码,该函数的功能为根据给出的参数求出包围所有点的凸包。
测试结果如下:
该函数是基于已有的函数、方法,设计一个自己的图形。
- 通过增大正多边形边数的方式构造近似为圆的图形;
- 参照计算正多边形内角和的思路,在空间内角度均匀分布圆形;
- 通过随机取数的方法改变圆的颜色。
构造出的图形效果如下:
通过git add *——>git commit -m “”——>git push提交到Lab1仓库。
该任务要求利用图的结构实现一张人际网络图,代码本质为实现有向图,但若想达到无向图的效果则在建立图中边的关系时要采用双向建立的方式。即如果要在两个person对象A和B之间增加一条社交关系,那么需要同时调用addEdge(A,B)和addEdge(B,A)两条语句。
-
-
- 设计/实现FriendshipGraph类
-
- 定义一个列表peopleList用来保存人的实例;
- 定义一个HashSet类,用于测试人的列表中是否有重复姓名的出现;
- 编写addVertex函数用来添加成员,即添加person实例;
- 编写addEdge函数用来添加成员之间的关系,addEdge(A,B)表示A->B有关系;
- 编写getDistance函数用来计算两个成员之间的最短距离,且距离只能沿有向边计算,定义边界情况getDistance(A,B),若A==B则return 0,若A与B之间无可以到达的有向边,则return -1;
-
-
- 设计/实现Person类
-
- 定义私人String类型name变量,保存实例的姓名;
- 定义列表friendList,用来保存实例的好友列表;
- 编写Person函数,用来建立实例;
- 编写addFriend函数,用来添加好友;
- 编写getname函数,用来调用person实例的姓名;
- 编写getList函数,用来调用person实例的friendList;
-
-
- 设计/实现客户端代码main()
-
结果为:
与预期结果一致。
-
-
- 设计/实现测试用例
-
- 编写testaddVertex函数,测试addVertex函数;
- 编写testaddEdge函数,测试addEdge函数;
- 编写testgetDistance函数,测试getDistance函数;
图的结构为:
测试结果为: