欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件构造 Lab 1实验报告

程序员文章站 2024-02-08 18:09:28
...

2020年春季学期
计算机学院《软件构造》课程

Lab 1实验报告

姓名 王雨宁
学号 1190201118
班号 1903006
电子邮件 [email protected]
手机号码 15953147100

目录

1 实验目标概述 1
2 实验环境配置 1
3 实验过程 2
3.1 Magic Squares 2
3.1.1 isLegalMagicSquare() 2
3.1.2 generateMagicSquare() 3
3.2 Turtle Graphics 4
3.2.1 Problem 1: Clone and import 4
3.2.2 Problem 3: Turtle graphics and drawSquare 4
3.2.3 Problem 5: Drawing polygons 5
3.2.4 Problem 6: Calculating Bearings 5
3.2.5 Problem 7: Convex Hulls 6
3.2.6 Problem 8: Personal art 6
3.2.7 Submitting 7
3.3 Social Network 7
3.3.1 设计/实现FriendshipGraph类 7
3.3.2 设计/实现Person类 9
3.3.3 设计/实现客户端代码main() 9
3.3.4 设计/实现测试用例 10
4 实验进度记录 11
5 实验过程中遇到的困难与解决途径 11
6 实验过程中收获的经验、教训、感想 12
6.1 实验过程中收获的经验和教训 12
6.2 针对以下方面的感受 12

1 实验目标概述
本次实验通过求解三个问题,训练基本Java 编程技能,能够利用Java OO 开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。
另一方面,利用Git 作为代码配置管理的工具,学会Git 的基本使用方法。
·基本的Java OO 编程
·基于Eclipse IDE 进行Java 编程
·基于JUnit 的测试
·基于Git 的代码配置管理
2 实验环境配置
下载并安装JDK1.8,配置环境变量。

安装eclipseIDE,最近的eclipse不支持java8,所以找到2019年3月的版本下载并解压
按照实验手册0创建github仓库,在本地安装git。

在这里给出你的GitHub Lab1仓库的URL地址(Lab1-学号)。
http://github.com/ComputerScienceHIT/HIT-Lab1-1190201118
3 实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
3.1 Magic Squares
将从1到n^2的整数填入边长为n的方阵,使得方阵的每一行,列,对角线的和相等,应为 (1 + n^2) * n / 2。
3.1.1 isLegalMagicSquare()
首先从文件读入数据,读入的是字符串,分割再转化后放入int类型的二维数组中,在这个过程中进行输入正确性的判断。在判断问题类型时对于输入内容的问题可以使用正则表达式

读入的同时进行计数,判断输入的形状是否为方阵。
读入过程中如果输入有错,在读入完成后将问题分别输出,再返回false
将输入正确读入一个方阵后,就可以进行判断,先对第一行求和,得到一个基准,然后对每一行,每一列,对角线求和,与基准判断,有不想等就返回false。最后成功就返回true。
3.1.2 generateMagicSquare()

需要判断输入,不能为负数或负数,否则打印提示信息并返回false

在函数最后需要写入文件,每个数字之间用”\t”分隔。
由于函数从第一行n/2的位置开始,向右上方依次填入数字,当一个斜线上的数字填好后,也就是每填入n个数字,就到最后填入的一个格子的下面填入下一个数字,而这个移动到最后一个格子下面的动作是不判断边界的,所以有可能溢出。每n个数字的开始都相对于上n个数字的开始向左下方移动了一个“日”字。如果n为偶数,则其中某n个数字的开始恰好会溢出。
如果填入负数,在创建数组时会报错,数组大小不能为负数。

3.2 Turtle Graphics
使用turtle画图,turtle是一个海龟,通过转向和前进来在画布上画线来画出图形。
3.2.1 Problem 1: Clone and import
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。

进入实验手册上给的github地址,下载代码的zip包,在本地解压。将代码放到项目P2目录下,将代码中包名称错误前都加上P2.让项目路径正确。
在代码目录下使用git bash,使用git init指令创建仓库并进行配置,在git bash中使用git指令管理本地开发。

3.2.2 Problem 3: Turtle graphics and drawSquare
每走一个边长,转90度,走四次,转三次

3.2.3 Problem 5: Drawing polygons
正多边形内角的公式为:(sides - 2) * 180 / (float)sides。而在海归画正多边形时,应转的角度是多边形的外角。对于n变形,海归移动n次,转n-1次角度。

画一个正七边形

3.2.4 Problem 6: Calculating Bearings
a.
以向北为0°,首先计算需要去的位置的绝对角度,使用arccos计算,需要使用Math库,同时判断目标点和当前点横坐标的相对位置来判断象限。得到目标位置相对当前位置的绝对角度。

得到需要转向的绝对角度和当前角度后,两者相减,如果差大于0就返回差,如果差小于0还需要再加360°。

b.
利用a中的函数,迭代地求两点间需要转的角度。

3.2.5 Problem 7: Convex Hulls
求闭包时,首先找到纵坐标最高的点,然后以最高点为起点和当前点,向上为0度角和当前角度进行迭代:遍历所有点,找到相对当前点和当前角度需要顺时针转过角度最小的点(利用problem6 a中的函数),由于要求最小闭包,向同角度的点取最远的;然后将该点设为当前点,当前角度增加需要转的角度,将得到的点加入集合;直到当前点回到起始点,循环结束。

3.2.6 Problem 8: Personal art

3.2.7 Submitting
在git bush中,使用如下命令:
git chechout master切换分支
git add *
git commit -m ‘ ’
git push origin master
就可以成功提交到链接的github仓库的对应分支

3.3 Social Network
设计Person类和FriendshipGraph类,其中FriendshipGraph类中需要对Person对象进行操作。
3.3.1 设计/实现FriendshipGraph类
类中实例化两个ArrayList对象persons和names,分别储存Person对象和String对象(人名),persons存储graph的vertex,names确保没有同名的人。

3.3.1.1 addVertex
如果有同名的人,输出提示信息并退出,如果没有同名的人,就向persons和names对象中添加。

3.3.1.2 addEdge
首先需要判断person1和person2存在在persons对象中。然后调用Person对象的addFriend方法。否则输出提示信息并退出。

3.3.1.3 getDistance
首先判断person1和person2存在persons对象中,

然后判断person1和person2是否是同一个人,是就返回0,

否则使用广度优先搜索计算两者之间的距离。两者之间的距离最多为graph的人数-1,所以如果搜索人数-1次还没搜索到的话就说明两者距离为-1。

如果输入的点不存在,就输出提示信息并退出

3.3.2 设计/实现Person类
需要两个属性,分别为名字String name和朋友列表friends,

构造方法初始化name,确保没有重名的人

addFriend方法,向朋友列表

3.3.3 设计/实现客户端代码main()
复制实验说明中的代码

输出

3.3.4 设计/实现测试用例
绘制社交网络中有不相连的点,还有单向边。

对于addVertex方法,创建额外的ArrayList对象,和待测试的方法添加相同的点,与FriendshipGraph对象中的ArrayList对象进行比较。

对于addEdge方法,同样创建额外的ArrayList对象,对应加入的点,每个对象和对应的点添加相同的边,判断对应的Person对象的friends属性是否相同。

对于getDistanse方法,直接判断输出的数字是否正确。

4 实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 时间段 任务 实际完成情况
2021-05-14 14:00-15:30 编写问题1的isLegalMagicSquare函数并进行测试 按计划完成
2021-05-14 16:00-17:00 编写问题1的要求二的注释和代码部分 按计划完成
2021-05-15 14:00-14:30 编写问题3的Person类 按计划完成
2021-05-15 15:00-17:00 编写问题3的FriendshipGraph类 按计划完成
2021-05-16 14:00-16:00 编写问题2的problem2-6 按计划完成
2021-05-17 14:00-17:00 编写问题2的problem7 按计划完成
2021-05-17 18:00-19:00 编写问题2的problem8 按计划完成
2021-05-18 18:00-19:00 编写问题3的FriendshipGraphTest类 按计划完成
5 实验过程中遇到的困难与解决途径
遇到的难点 解决途径
eclipse工作目录不能和项目目录为同一个文件夹
使用idea IDE
不熟悉JAVA语法和工具
百度,查看博客和教程
不熟悉git和github使用方法
菜鸟教程
6 实验过程中收获的经验、教训、感想
6.1 实验过程中收获的经验和教训
学习了JAVA语法和git使用方法。了解了不同IDE的一些区别。
要注意项目的包之间的相互依赖,注意相对路径。
要注意变量类型。
要注意变量声明仅在代码块之内有效。
6.2 针对以下方面的感受
(1) Java编程语言是否对你的口味?
很适合编写软件项目,相比其它语言,比C更“高级”,支持面向对象,比python更安全,适合项目开发。
(2) 关于Eclipse IDE
不如IDEA好用。
工作目录不能为项目目录很奇怪,不知道是不是我理解错了。
(3) 关于Git和GitHub
很好的代码管理工具。
(4) 关于CMU和MIT的作业
渐进的题目设计很适合一步步学习。
可以试着设计HIT的作业。
(5) 关于本实验的工作量、难度、deadline
工作量还好,难度适中,时间有点短,希望告知TA如何运行程序,以便自行检查提交的项目是否能够运行。
(6) 关于初接触“软件构造”课程
学习了软件构造的过程。
希望给出教学大纲,现在对课程内容还有疑惑。

相关标签: java

上一篇: 《ucore lab2》实验报告

下一篇: