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 的 基本使用方法。
(1)基本的 Java OO 编程
(2)基于 Eclipse IDE 进行 Java 编程
(3)基于 JUnit 的测试
(4)基于 Git 的代码配置管理
2 实验环境配置
简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
在这里给出你的GitHub Lab1仓库的URL地址(Lab1-学号)。
Lab1-L180300401
Github URL : https://github.com/ComputerScienceHIT/Lab1-L180300401
3 实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
3.1 Magic Squares
在这里简要概述你对该任务的理 MagicSquare 实验上首先要理解在Java上读入和写入文件的方法,还要学习读入数组使将字符串转换成数字,判断读入的数字是否是符合要求,还要学习生成MagicSquare的方式以及判断输出。
3.1.1 isLegalMagicSquare()
按步骤给出你的设计和实现思路/过程/结果。
- 定义一个一维数组来用来存储从文件中按行读出的字符串。
- 然后通过语句
String[] m = str[j].split("\t");
ms[j][k] = Integer.valueOf(m[k]);
来按照制表符来切割字符串,并转换成int类型整数,再定义一个二维数组用来存储得到的整数。
3.得到矩阵后,先求出矩阵第一行数据的和。然后再与剩余的行和列以及对角线元素的和来比较,若不相等则返回false,最后如果都相等则返回true.
3.1.2 generateMagicSquare()
按步骤给出你的设计和实现思路/过程/结果。
- 首先判断传的参数n是否是正数且是奇数,若不是则打印相应提示信息并退出。
- 然后按照流程图的算法来生成MagicSqure
- 最后通过BufferedWriter写入文件。
3.2 Turtle Graphics
任务理解:实现一个完整的绘制工具Trurtle Graphics。主要考点:计算几何基础知识,正多边形的内角外角,java函数调用绘制多边形,计算向量之间的夹角,计算凸包,使用Junit进行单元测试。
3.2.1 Problem 1: Clone and import
从本地创建git仓库:
1.git init初始化本地仓库
2.git add remote origin 添加远程库源
3.在远程仓库创建master分支
4.git pull origin master将远程仓库同步到本地
5.git add->git commit->git push 将本地文件加入本地仓库,将本地仓库同步到远程仓库
3.2.2 Problem 5: Drawing polygons
调用calculateRegularPolygonAngle计算正多边形内角。根据正多边形内角=(边数-2)/sides。
3.2.3 Problem 6: Calculating Bearings
计算从一个点到下一个点,依次需要转过的角度。先计算第一个到第二个点和y轴之间的夹角,然后通过for循环,计算以result中上一个角为准,到下一个点转动的角度。
3.2.4 Problem 7: Convex Hulls
采用gift-wrapping算法实现convexHull
(1)先找出最左下的点A,加入返回的结果result中
(2)利用方法calculateBearingToPoint,依次计算从上一个加入result的点和所有未加入点(除A外)的直线和y轴之间的夹角,将夹角最小的点标记为可加入。
(3)如果标记的点的夹角,与上一个加入的点的夹角相同,则去除上一个点。
(4)将标记的点加入result
(5)直到A点被第二次标记,算法结束。
3.2.5 Problem 8: Personal art
运行结果
3.2.6 Submitting
Git push提交代码。
3.3 Social Network
实现Person和FriendshipGraph两个类,模拟社交网络,提供添加节点(人),节点之间添加边(社交关系),通过BFS计算两节点之间最短路的功能。主要考点:java类的实现,java基本数据结构,BFS
3.3.1 设计/实现FriendshipGraph类
使用List name存储所有节点。int[][]graph以邻接矩阵记录边。
addVertex:添加节点,向persons List中添加一个person对象。
addEdge: 添加边,计算两人下标,graph数组对应位置改为1 。
getDistance:利用BFS计算两人间最短路径。
3.3.2 设计/实现Person类
String name 储存人名。
SetName(String name) 设置名字
String GetName() 返回储存的名字
Person(String string) 传参并调用SetName设置名字
3.3.3 设计/实现客户端代码main()
无
3.3.4 设计/实现测试用例
测试单边联通的特殊情况,测试重名的情况