目录
2 实验环境配置
3 实验过程
3.1 Magic Squares
3.1.1 isLegalMagicSquare()
3.1.2 generateMagicSquare()
3.2 Turtle Graphics
3.2.1 Problem 1: Clone and import
3.2.2 Problem 3: Turtle graphics and drawSquare
3.2.3 Problem 5: Drawing polygons
3.2.4 Problem 6: Calculating Bearings
3.2.5 Problem 7: Convex Hulls
3.2.6 Problem 8: Personal art
3.2.7 Submitting
3.3 Social Network
3.3.1 设计/实现FriendshipGraph类
3.3.2 设计/实现Person类
3.3.3 设计/实现客户端代码main()
3.3.4 设计/实现测试用例
4 实验进度记录
5 实验过程中遇到的困难与解决途径
6 实验过程中收获的经验、教训、感想
6.1 实验过程中收获的经验和教训
6.2 针对以下方面的感受
- 实验目标概述
本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开
发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够
为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。
另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
⚫ 基本的 Java OO 编程
⚫ 基于 Eclipse IDE 进行 Java 编程
⚫ 基于 JUnit 的测试
⚫ 基于 Git 的代码配置管理
- 实验环境配置
本实验使用了IDEA而不是pdf中给出的eclipse作为ide,不过还是通过pdf中给出的链接安装了eclipse,不过没有使用,在git官网下载了git,并在IDEA中下载了git和Junit插件,安装过程中并未出现困难
GitHub Lab1仓库的URL地址:
https://github.com/ComputerScienceHIT/HIT-Lab1-1190201517
- 实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
-
- Magic Squares
幻方:对一个行列数相等的矩阵,若其每一行之和、每一列之和以及对角线之和都相等,则其为一个幻方(Magic Square)
要求一:
设计一个程序来判断五个文件中的矩阵是否为MagicSquare,其中文件保存的矩阵需以\t分割每个数字。若是返回true,若不是或文件有错误则输出false并输出错误原因。
要求二:
设计一个函数来生成一个给定大小的MagicSquare,并存入到文件6.txt中,并用要求一中的和函数判断其是否为符合定义的MagicSquare。
-
-
- isLegalMagicSquare()
-
对于读入的文件,构建二维数组存储其中的数字,读入过程中即可检查其行列是否相等、是否均为正整数,是否由\t分割等,若不符合定义则弹出报错终止程序。因为使用Integer.valueOf存入数组,在读取到空格时会报错,以此检验数字是否由\t分割
读入完毕后,对于得到的二维数组,计算其各行、列以及两对角线之和并依次比较,一旦发现不相等就跳出循环并返回false,若最终没有发现不相等,则返回true。
-
-
- generateMagicSquare()
-
生成magicsquare的函数已经在手册中给出,因此我们只需检查输入的n是否合法(正奇数),不合法是终止函数返回false,合法时生成、写入文件并返回true。之后在用要求一的函数检验生成的文件即可。
-
- Turtle Graphics
根据要求,我们要按照注释补全给定程序中缺失的特定功能的函数,来实现一个绘图工具,其能够实现绘制正多边形、计算正多边形内角、计算偏角等功能。
-
-
- Problem 1: Clone and import
-
从给定链接下载P2的文件包并导入项目中。
-
-
- Problem 3: Turtle graphics and drawSquare、
-
通过已经给出的转向和前进指令来绘制正方形
-
-
- Problem 5: Drawing polygons
-
绘制指定边数和边长的正多边形
-
-
- Problem 6: Calculating Bearings
-
通过给定朝向和点集,计算改变朝向的偏角值集
-
-
- Problem 7: Convex Hulls
-
利用BFS算法计算给定点集的凸包
-
-
- Problem 8: Personal art
-
-
-
- Submitting
-
通过IDEA的git插件,输入url提交至自己的github仓库中
-
- Social Network
通过Person和FriendshipGraph两个类,用FriendshipGraph模拟Person对象间的社交关系,实现对社交网络的模拟,并实现计算两个Person之间的最短社交距离的功能。
-
-
- 设计/实现FriendshipGraph类
-
存储网络中的person以及person的全部name
加入新用户时,检测是否有重名,若重名终止程序
通过person类中的操作实现addEdge
使用有向图的BFS算法计算两点的最短距离。
主函数部分实现了手册中给出的代码
运行结果:
-
-
- 设计/实现Person类
-
Person类代码如下
Person类包含了用户姓名以及人际关系,通过List保存每个对象的朋友以表现朋友关系,因此通过向List中添加元素实现addFriend的功能。
-
-
- 设计/实现客户端代码main()
-
-
-
- 设计/实现测试用例
-
通过三个测试用例,检验程序的添加用户、添加用户关系、计算最短距离三个功能
- 实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 | 时间段 | 任务 | 实际完成情况 |
2021-05-11 | 13:45-15:30 | 大致学习实验内容,编写问题1的isLegalMagicSquare函数 | 按计划完成 |
2021-05-20 | 全天 | 完成P1及P2全部内容 | 超过凌晨几小时 |
2021-05-23 | 全天 | 完成剩余内容并整理学习到内容 | 完成 |
- 实验过程中遇到的困难与解决途径
遇到的困难 | 解决途径 |
对java掌握不熟练,很多方法、函数需要查阅资料,浪费了很多时间 | 努力学习java,掌握基本代码方式 |
对github不太了解,不清楚仓库、clone等功能是如何运作的 | 查阅各种资料,实践理解功能 |
- 实验过程中收获的经验、教训、感想
- 实验过程中收获的经验和教训
大概了解了java的代码、项目管理、git的版本控制、以及github的共享体系
-
- 针对以下方面的感受
- Java编程语言是否对你的口味?
还可以,有时不够直观,但整体上功能更多,比c更灵活
- 关于Eclipse IDE;
没有使用,习惯使用IDEA,今后会补充这方面的不足
- 关于Git和GitHub;
用得不太好,但也还行
- 关于CMU和MIT的作业;
很有创意,给我提供了很多思路
- 关于本实验的工作量、难度、deadline;
难度很适合作为第一次实验
- 关于初接触“软件构造”课程;
有很多不习惯的地方,但是一一克服后感觉收获颇丰