HIT软构Lab1心得
2023年春季学期
计算学部《软件构造》课程
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
本次实验开发测试运行的环境为IDEA,在配置环境的过程中,主要遇到的是JDK版本实验要求不符的情况,打开IDEA集成开发环境工具,点击:File--Project Structure进行JDK的更改。
请仔细对照实验手册,针对三个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
读取五个文本文件,并检查其中矩阵行列对角线值,并判断他是否为幻方矩阵。
FileReader文件字符输入流,BufferedReader缓冲输入流,将字符串并保存在一个String类型的tmp字符串中,并加入集合list中。
采用Integer的valueOf()方法判断是否存在非整数和非正数的情况。
计算行、列、对角线上数字和的值,进行判断是否符合幻方矩阵的性质。
3.2.1 Problem 1: Clone and import
克隆项目的地址 git clone xxx ,显示100%时就代表项目克隆成功
3.2.2 Problem 3: Turtle graphics and drawSquare
调用已经实现的forward和turn函数,向前走sideLength,转90°角,实现正方形的绘制。
3.2.3 Problem 5: Drawing polygons
calculateRegularPolygonAngle()函数求解给定边数的正多边形的内角度数。
每次前进sidelength,转向的角度为外角的度数(通过调用calculateRegularPolygonAngle()函数得到),循环次数为边数
calculatePolygonSidesFromAngle()函数求解给定正多边形内角大小的边数。
Problem 6: Calculating Bearings
以某点作为出发点,面向某个方向,要前往指定坐标点,需要转过多少角度。我们通过调用math.atan2函数,计算角度,最终确定转角。
3.2.4 Problem 7: Convex Hulls
当点集中的点少于等于两个时,凸包由点集中的所有点组成,直接将两点返回。
3.2.5 Problem 8: Personal art
通过调用drawRegularPolygon()函数,在循环中实现正多边形的绘制,每次绘制完一个正多边形,角度转10度,形成对称规律的图形(形似花朵)。简单绘制茎秆和叶子(平行四边形)。
如何通过Git提交当前版本到GitHub上你的Lab1仓库。
打开GitBash,输入git push origin master即可。
3.3 Social Network
该问题需要我们将社交网络建模为一个无向图,其中每个人连接到零个或多个用户。
首先定义集合来存储people和name。addVertex:起到添加朋友的作用,定义hashset方便判断重复情况。
getDistance:利用HashMap采用广度优先算法获取最小距离,未联通时返回值为-1.
设计存储String类型存储person的name,存储人的朋友集合FriendshipList以及AddFriend,getName,getFriendshipList方法。
注释掉“graph.addEdge(rachel, ross)”
Rachel与任何人都不相邻,返回-1;自己到自己的距离为0,getDistance(rachel, rachel)返回0。
如果将第 3 行引号中的“Ross”替换为“Rachel”,违反了“Each person has a unique name”的约束条件,此时提示出错并结束程序运行。
针对addVertex测试:主要测试添加人的情况,首先测试是否能加入person a 和 b,其次测试重复的person(b)加入后,是否会输出FALSE而使程序终止。
针对addEdge测试:测试无向图中是否成功加入了加入边ab。
对getDistance的测试:构建无向图,检验距离是否与预期吻合。
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 |
时间段 |
任务 |
实际完成情况 |
2022-03-06 |
16:00-18:30 |
编写问题1的isLegalMagicSquare函数并进行测试 |
按计划完成 |
2022-03-08 |
14:00-16:30 |
根据注释补充问题2的TurtleSoup代码 |
遇到困难,未完成,凸包问题未完成 |
2022-03-08 |
18:00-19:00 |
补充问题2的凸包算法代码 |
按计划完成 |
2022-03-10 |
14:00-16:00 |
编写问题3的主要代码 |
延期半小时完成 |
2022-03-11 |
14:00-16:00 |
编写问题3的测试 |
按计划完成 |
2022-03-12 |
14:00-15:00 |
优化代码 |
按计划完成 |
遇到的困难 |
解决途径 |
初学JAVA做实验的时候有思路,但是不知道JAVA中用什么方法来实现 |
查阅资料,积累经验,增强自己对java语言的掌握 |
初次使用Git,中间出错很多次 |
在CSDN上查找资料,并进行实践 |
初次接触凸包问题,对解决凸包问题的算法不是很了解 |
查询资料进行学习,学习算法内在的思想,并完善自己的代码 |
6.2 针对以下方面的感受(必答)
1.Java编程语言是否对你的口味?与你熟悉的其他编程语言相比,Java有何优势和不足?
优势:Java提供的库函数功能十分强大,有大量封装好的方法。
不足:Java删除了指针,所以不如C语言灵活,并且不像C语言那样写代码直接编译运行,需要自己创建class等等。
2.关于Eclipse或IntelliJ IDEA,它们作为IDE的优势和不足;
3.关于Git和GitHub,是否感受到了它在版本控制方面的价值;
喜欢MIT作业的形式,可以根据规约来实现方法,也是对自己编程的一种锻炼,完成后进行test还可以更好的检验。
工作量中等偏多,但是给的时间很充裕,难度的话我认为凸包算法那部分较难,由于本学期刚刚接触算法,所以觉得有些吃力。Deadline时间合理。
我认为这门课很好,将理论与实践很好的结合了,真正地去了解了开发软件时的一些事项,为未来同学们的实习和就业都奠定了良好的理论基础和实践基础。
HIT软构Lab1心得相关推荐
- HIT软构lab2中GraphPoet的一种实现
首先是第一个方法GraphPoet的实现 public GraphPoet(File corpus) throws IOException {BufferedReader br = new Buffe ...
- 软构习题课一内容总结
软构作为一门编程课,竟然还有习题课是我没想到的.第一次上习题课时我们还没有像现在一样为各科期末考试忙得焦头烂额,所以我花了很长时间理解习题一.直到开始做实验一,我发现习题课真的太重要了!!因为习题一中 ...
- 中软实训总结_中软实训心得
中软实训心得 在厦门中软的一个多月里,在那里学习的经历让我怀念,难忘,在那里的每一天都会让我成长.在中软的实训生活中,我深刻体会到了自己专业方面的欠缺和不足,也意识到了作为计算机网络工程专业的学生,要 ...
- 软构实验知识补充:什么是代码覆盖率
学习内容: 关于代码覆盖率的相关知识与IDEA检测代码覆盖率的方法. 背景: 今天做软构lab2时需要在Eclipse下面使用Eclemma工具测试所谓的代码覆盖率.我对这个概念产生了一些好奇,于是做 ...
- (迟到了半个多月的)第一次软构实验总结
date: 2019-03-09 20:08:00 第一次软构实验 第一次的软构实验本来以为会非常简单,但是没想到坑点那么多.从需要的算法层面来说确实不难,但是细节的处理还是挺麻烦的,感觉和传统的AC ...
- HIT 软件构造 Lab1
2022年春季学期 计算学部<软件构造>课程 Lab 1实验报告 姓名 艾浩林 学号 120L021917 班号 2003006 电子邮件 2017869860@qq.com 手机号码 1 ...
- HIT软件构造lab1
目录 1 实验目标概述 1 2 实验环境配置 1 3 实验过程 1 3.1 Magic Squares 1 3.1.1 isLegalMagicSquare() 1 3.1.2 generateMag ...
- 软构实验(二 )博客
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMb9NQzR-1625031897332)(media/b7c1f747a870edf8b0db7af7453bb90 ...
- HIT软件构造-学习心得
伪代码编程 伪代码是指某种用来描述算法.子程序.类或完整程序的工作逻辑的.非形式的.类似于英语的记法. 1. 用类似英语的语句来精确描述特定的操作 2. 避免使用目标编程语言中的语法元素 这点是关键, ...
最新文章
- mysql编辑工具wf_轻松构建自定义WF设计器
- 解决cocoapods在64位iOS7系统以下的警告问题
- ThreadPoolExecutor运转机制详解(转)
- 2016年个人技术总结(前端)
- Android成长日记-Android监听事件的方法
- Java消息服务~JMSReplyTo示例
- mysql降序后去重_Mysql 数据记录去重后按字段排序
- day21 java的随机数
- python语言-python语言基本语句用法总结
- 利用深度学习自动补全 Python 代码,这个开源项目有点牛逼
- web图书销售管理系统_美萍手机销售WEB版销售管理系统整体解决方案服务商
- linux开机启动界面异常,Linux 界面不能启动的解决
- 蓝桥杯摔手机测试次数
- Redis启动窗口一闪就关
- VSCode+latex引用bibtex参考文献
- Vue源码--解读vue响应式原理
- 柏拉图對愛與婚姻得啟示---------捷徑穿越人生得麦田
- 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)
- 在早教阶段幼儿应不应该使用计算机,计算机与幼儿教育
- SAP各种BOM的定义简洁易懂