哈工大软件构造Lab1实验报告
2020年春季学期
计算机学院《软件构造》课程
Lab 1实验报告
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
首先,在实验教程中指定的MIT网站上下载Eclipse、JDK和Git并安装。
在为JDK配置环境变量的时候,在系统环境变量中新建一个叫“JAVA_HOME”的环境变量,变量值为JDK的安装路径。然后在Path的环境变量中添加一个“%JAVA_HOME%bin”的变量值。
- 实验过程
- Magic Squares
Magic Squares即幻方,类似数独游戏
- isLegalMagicSquare()
首先,我们先将文档中的矩阵读入并以字符串的形式存储(每行为一个字符串)
然后,我们将以字符串形式存储在result中的矩阵转化为整型矩阵并在此期间检查矩阵输入及矩阵大小是否合法,若非法则返回false并在命令行打印Invalid Input或Invalid Metrics。
最后,分别从行、列、对角线对矩阵进行求和,检查其是否相等
- generateMagicSquare()
流程图如下所示
(1)两个Exception原因及解决方案
NegativeArraySizeException:NegativeArraySizeException产生的原因在于修改前的函数未经检查直接使用n作为数组下标,当n为负数时,则会抛出此异常
ArrayIndexOutOfBoundsException:ArrayIndexOutOfBoundsException产生的原因是数组下标越界,当n为偶数时,如下图所示,以2为例。当填写2×1单元时,i%n==0,此时row++==2,则会导致数组越界。
为解决上述问题并“优雅”地退出程序,我们应在函数起始时判断n的范围,若n的范围非法,则返回false并在命令行打印错误信息,如下图所示。
(2)函数拓展有以下两点,一是在函数初始时加入对n范围的判断,该部分已在(1)中详细说明;二是文件输出,由于函数中已有命令行输出函数,文件输出在命令行输出的基础上加入文件操作即可,代码如下:
文件、命令行输出及测试结果如下
- Turtle Graphics
根据代码注释提示补全代码从而实现一个绘制工具Turtle Graphics。
1、从Github上获取任务的源代码,在本地创建git仓库,使用git管理本地开发
2、画出正四边形。
3、完成正多边形内角和外角的计算
4、计算向量之间的夹角
5、计算凸包
6、绘制自己的图形
- Problem 1: Clone and import
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
- Problem 3: Turtle graphics and drawSquare
该问题是通过turtle画一个边长为sideLength的正方形,实现方法比较简单,前进四次并转弯三次即可完成,代码如下图所示。
- Problem 5: Drawing polygons
使用turtle画正多边形,首先需要根据正多边形的边数计算其内角大小,计算公式:angle=180-360∕sⅈdes ,源码如下图所示:
然后编写由边数计算角度的函数(不明所以),源码如下图所示:
类似上节实验,正多边形可以使用for循环完成,如下图所示
- Problem 6: Calculating Bearings
该部分首先需要补全calculateBearingToPoint方法,该方法的几何推导如下图所示:
完成推导后,即可利用Java进行实现,代码如下所示:
该部分还需要补全calculateBearings方法,该方法直接在calculateBearingToPoint方法基础上迭代即可,源码如下图所示:
- Problem 7: Convex Hulls
本次实验中,使用贪心策略计算凸包:
①选取点集中最左下的点为初始基点,并将其加入凸包
②从初始基点开始,依次搜索点集中每个点并计算其偏移角,找出点集中相对基点最小偏移角所对应的点,将其作为新的基点并加入凸包
③依次进行搜索,直到某次所得基点已经在凸包中,结束算法
算法主循环如上图所示,我们使用temp记录搜索过程中每个点相对于基点的偏移角,并用angle记录最小偏移角,用temp1记录其对应顶点。
注意到:每次循环都将angle设置为9999.0是为了接受搜索的第一个顶点
- Problem 8: Personal art
选取红色画出如图所示嵌套的三角形(由于不能使用递归,无法对其进行全填充)
- Submitting
git add *->git commit -m “”->git push提交到Lab1仓库
- Social Network
本处社交网络可以通过有向图建模,每个Person为图中的一个节点。若两个Person有关联,则图中对应的两个顶点之间有边。
分析需求可知,FriendshipGraph类需要存储以Person类为节点的图,并且需要实现图边和点的添加,以及先广搜索。
addVertex方法如下图所示,接收到输入后,首先判断其是否已经在点集中,若在则终止函数并返回false,否则将其存入Vertex中并返回true。
由实验手册,main()代码如下图所示
如果将测试代码第十行注释掉,输出结果为-1,-1,0,-1。
如果不满足每个人名字不同,addVertex方法会提示错误并终止此次执行
- 设计/实现测试用例
测试方法中前两者较为简单,在此不做介绍,这里主要介绍对getDistance方法的测试
getDistance方法的代码如上图所示
上述代码构建如上图所示的社交网络图
测试结果如下所示
- 实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 |
时间段 |
任务 |
实际完成情况 |
2021-05-19 |
13:00-15:10 |
编写问题1的isLegalMagicSquare函数并进行测试 |
按计划完成 |
2021-05-19 |
20:00-22:00 |
编写Person类及FriendshipGraph类 |
按计划完成 |
2021-05-20 |
16:00-20:00 |
编写Turtle部分 |
按计划完成 |
- 实验过程中遇到的困难与解决途径
遇到的难点 |
解决途径 |
Java的文件操作 Java文件操作不输出 |
在CSDN上查找相关操作,并与同学进行讨论 经查阅资料得知,FileWriter必须关闭才会在文件中输出,之前C代码从来不关闭文件的习惯需要改改了 |
calculateBearingToPoint方法中atan返回值值域为(-pi/2,pi/2),导致旋转角不是一一映射 |
使用atan2方法,该函数返回值值域为(-pi,pi) |
FriendshipGraph类中存储图的顶点使用什么数据结构 |
Java我不太熟悉,知道Python中有字典数据结构,查找资料后发现Java中的Map可以实现类似的功能,故使用Map |
哈工大软件构造Lab1实验报告相关推荐
- 哈工大软件构造lab2实验报告
1 实验目标概述 2 实验环境配置 3 实验过程 3.1 Poetic Walks 3.1.1 Get the code and prepare Git repository 3.1.2 Proble ...
- 软件构造Lab1——实验报告
1. 实验目标概述 本次实验通过求解四个问题,训练基本 Java 编程技能,能够利用 Java OO 开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测 ...
- 2022哈工大软件构造lab1小结(知识点)
哈工大软件构造lab1小结 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 问题一 使用的库 异常处理机制 字符串内容检查 写入文件 问题二 problem 3:画一 ...
- 软件构造lab2 - 实验报告
软件构造lab2 - 实验报告 1.实验目标概述 2.环境配置 3.实验过程 3.1Poetic Walks 3.1.1Get the code and prepare Git repository ...
- 软件构造Lab1实验总结
软件构造Lab1实验总结 1 实验目标概述 本次实验通过求解四个问题,训练基本 Java 编程技能,能够利用 Java OO 开 发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够 ...
- 哈工大2020软件构造Lab2实验报告
本项目于3.17日实验课验收,请放心参考 参考时文中有给出一些建议,请查看 基本更新完成 2020春计算机学院<软件构造>课程Lab2实验报告 Software Construction ...
- [HITSC]哈工大2020春软件构造Lab3实验报告
Github地址 1 实验目标概述 本次实验覆盖课程第 3.4.5 章的内容,目标是编写具有可复用性和可维护 性的软件,主要使用以下软件构造技术: 子类型.泛型.多态.重写.重载 继承.代理.组合 常 ...
- HIT 软件构造 lab3实验报告
2020年春季学期 计算机学院<软件构造>课程 Lab 3实验报告 姓名 赵旭东 学号 1180300223 班号 1803002 电子邮件 1264887178@qq.com 手机号码 ...
- 哈工大软件构造lab1
2020年春季学期 计算机学院<软件构造>课程 Lab 1实验报告 姓名 麦昌瀚 学号 190110920 班号 7 电子邮件 835889372@qq.com 手机号码 目录 1 实验目 ...
最新文章
- UVA 11210 Chinese Mahjong
- activiti5第四弹----serviceTask中的java服务任务
- 新鲜出炉的2012年8月桌面日历壁纸免费下载
- 【转载】关闭ftp中mput的上传确认提示:prompt
- mybatis 映射问题(mysql date与java Date类型格式错误)
- ➤mobi➢azw3➢epub⇨电子书阅读器 转换器
- ug许可证服务器注册表删除,ug许可证卸载工具
- 毕业论文中word的使用1-代码域标公式
- ThinkPad R400 T400 详细拆机图解超精华
- Word 文档中的图片另存为 .jpg 格式图片方法
- 老域名抢注技巧是什么?
- 移动ChemDraw结构有什么方法
- matlab 矩阵处理,matlab矩阵处理
- 2021年金属非金属矿山(露天矿山)安全管理人员最新解析及金属非金属矿山(露天矿山)安全管理人员模拟考试
- 性别平等进展倒退136年!疫情引发女性经济衰退;阿斯利康与丹纳赫雷度米特、路胜达成合作 | 美通社头条...
- 毕业设计 —— 基于STM32手势控制显示系统的设计
- 【听】百年孤独,拉丁美洲悲剧奋斗史
- opencv,sobel求梯度,C++实现
- PHP工资管理系统、考勤管理系统、薪资管理系统
- 苹果seo_1+X网店运营推广中级标品新品seo优化