目录
1
实验目标概述
........................................................................................................................ 1
2
实验环境配置
........................................................................................................................ 1
3
实验过程
................................................................................................................................ 1
3.1 Magic Squares.................................................................................................................. 1
3.1.1
isLegalMagicSquare()
...................................................................................... 1
3.1.2
generateMagicSquare()
....................................................................................3
3.2 Turtle Graphics................................................................................................................. 4
3.2.1 Problem 1: Clone and import.....................................................................................5
3.2.2 Problem 3: Turtle graphics and
drawSquare
...........................................................5
3.2.3 Problem 5: Drawing polygons................................................................................... 5
3.2.4 Problem 6: Calculating Bearings............................................................................... 6
3.2.5 Problem 7: Convex Hulls...........................................................................................6
3.2.6 Problem 8: Personal art..............................................................................................7
3.2.7 Submitting..................................................................................................................7
3.3 Social Network................................................................................................................. 7
3.3.1
设计
/
实现
FriendshipGraph
类
.......................................................................... 7
3.3.2
设计
/
实现
Person
类
............................................................................................ 10
3.3.3
设计
/
实现客户端代码
main()
............................................................................. 10
3.3.4
设计
/
实现测试用例
............................................................................................... 11
4
实验进度记录
...................................................................................................................... 14
5
实验过程中遇到的困难与解决途径
.................................................................................. 14
6
实验过程中收获的经验、教训、感想
.............................................................................. 14
6.1
实验过程中收获的经验和教训
................................................................................... 14
6.2
针对以下方面的感受
................................................................................................... 14
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
1
1
实验目标概述
本次实验通过求解三个问题,训练基本
Java
编程技能,能够利用
Java OO
开
发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够
为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确
性。
另一方面
,利用
Git
作为代码配置管理的工具,学会
Git
的基本使用方法。
基本的
Java OO
编程
基于
Eclipse IDE
进行
Java
编程
基于
JUnit
的测试
基于
Git
的代码配置管理
2
实验环境配置
简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给
出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
3
实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你
的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码
加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
3.1 Magic Squares
幻方是一种每行和、每列和以及对角线和均位同一常数的
n*n
矩阵。
3.1.1
isLegalMagicSquare()
1.根据文件名访问并读取对应文件:
1)已知文件存储在项目的\
src
\
P1
\
txt
\文件夹下,可利用相对路径访问文件并
创建 file 对象;
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
2
2)通过 file 对象读取文件大小
filelongth
,新建对应大小的
byte
[]数组
filecontent
存储文件内容;
3)将读取的文件内容转化为"
UTF
-8"编码的字符串存储在
content
字符串中;
2. 对文件内容进行分割得到数据
1)利用"\n"对字符串 content 进行分割,从而得到各行数据以及矩阵行数;
2)对数据进行处理,判断矩阵数据的合法性并分离出各数据的值同时得到各
行各列以及对角线的和
3)通过各行各列以及对角线的和判断矩阵是否为 MagicSquare
Main 函数:
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
3
3.1.2
generateMagicSquare()
首先从初始位置
(0,n/2)
开始,赋值为
1
,之后每次取当前位置右上的位置,
当前数值
+1
填入下一个位置。当前在第一行时,下一个位置在第
n
行;当前位
置在第
n
列时,下一个位置在第
1
列。如此循环
n*n
次后,填满整个
n*n
的矩阵,
且经过验证,这样的矩阵满足幻方的定义。
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
4
3.2 Turtle Graphics
根据代码注释提示补全代码从而实现一个绘制工具
Turtle Graphics
。
1
、从
Github
上获取任务的源代码,在本地创建
git
仓库,使用
git
管理本地开发
2
、画出正四边形。
3
、完成正多边形内角和外角的计算
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
5
4
、计算向量之间的夹角
5
、计算凸包
6
、绘制自己的图形。
3.2.1 Problem 1: Clone and import
从
github
上获取代码:网页
download
。从本地创建
git
仓库:
1
、
git init
初始
化本地仓库
2
、
git add remote
添加远程库源
3
、在远程仓库创建
master
分支
4
、
git pull origin master
将远程仓库同步到本地
5
、
git add * ->git commit -m
“”
->git
push
将本地文件加入到本地仓库,将本地仓库同步到远程仓库。
3.2.2 Problem 3: Turtle graphics and
drawSquare
1、首先发现
forward
、
turn
函数的功能是实现给定参数的前进和转向
2、我们通过四次循环,每次前进并转 90°就可以得到我们想要的正方形
3.2.3 Problem 5: Drawing polygons
1、利用公式:正多边形的每个内角=180°*(sides -2)/sides 补全
calculateRegularPolygonAngle
。
2
、
由上述公式可以逆推出:正多边形边数=360°/(180°-angle),由此可以补全
calculatePolygonSidesFromAngle
:
3
、补全
drawRegularPolygon
:
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
6
3.2.4 Problem 6: Calculating Bearings
利用
atan2
函数计算前进方向与
x
轴正向夹角,之后把该角度转换成和 y 正
向的夹角。若出现负数要加上 360°。
3.2.5 Problem 7: Convex Hulls
运用
Gift wrapping algorithm
算法,每次选择转向角最小且距离最长的点加入
集合。
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
7
3.2.6
Problem 8: Personal art
3.2.7
Submitting
git add *->git commit -m
“”
->git push
提交到
Lab1
仓库
3.3 Social Network
利用各种数据结构,实现一张人际关系网络。写一个计算人际关系
“
距离
”
的
函数
3.3.1
设计
/
实现
FriendshipGraph
类
建立两个
List
分别储存人物和姓名。其中
List name
用来检测人名是否重复。
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
8
检测输入人名是否重复,不重复则列入两表中,表示改人物已被录入。
若
Person1
与
Person2
认识,
Person2
出现在
Person1
的
fiend
列表(即邻接表)
中。
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
9
若二人认识,函数返回关系网中二人的最短路径,否则将返回
-1
表示二者不
可能认识。
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
10
3.3.2
设计
/
实现
Person
类
Person
类中储存了任务的姓名以及其直接认识的人。
3.3.3
设计
/
实现客户端代码
main()
直接使用实验手册中提供的
main
函数。
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
11
结果为:
3.3.4
设计
/
实现测试用例
测试
addVertex
:
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
12
测试
addEdge
:
测试
getDistance
:
建立一个这样的社交网络:
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
13
结果如下:
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
14
4
实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
日期
时间段
任务
实际完成情况
2021-05-18
22:00-24:00
编
写
问
题
1
的
isLegalMagicSquare
函数并进
行测试
按计划完成
2021-05-20
22:00-24:00
完成
p1
以及
turtle
的初步调试
按计划完成
2021-05-21
15:30-20:00
完成
p2
遇到困难,未完
成
2021-05-22
10:00-13:00
完成
p2
按计划完成
2021-05-22
19:00-22:00
完成
p3
主体程序
按计划完成
2021-05-23
10:00-14:00
完成测试用例的编写
按计划完成
5
实验过程中遇到的困难与解决途径
遇到的难点
解决途径
不知道如何进行文件操作
在网络上查找资料学习
不知道如何对
Set
中元素
进行操作
在网络上查找资料学习
6
实验过程中收获的经验、教训、感想
6.1
实验过程中收获的经验和教训
6.2
针对以下方面的感受
(1) Java
编程语言是否对你的口味?
Java
作为一种面向对象的编程语言,提供了比面向过程的
C
语言更加丰
富的数据结构,对不同的场景能够提供
软件构造课程实验报告
实验
1
:
Java
基础编程与测试
15
(2)
关于
Eclipse IDE
IDE
的功能繁多,刚上手会对
eclipse
的使用有些懵。
(3)
关于
Git
和
GitHub
Git
的入门上手较为简单,尤其是版本控制功能尤为好用。
Github
可以用
来与他人共享自己的成果
(4)
关于
CMU
和
MIT
的作业
作业难度不大。
(5)
关于本实验的工作量、难度、
deadline
工作量适中,难度也不是很大,
deadline
很宽松,有充足的时间来做实
验。
(6)
关于初接触“软件构造”课程
开始两周所学的课程基本上都属于概念层面,初步了解了课程对软件质
量的注重。