Lab1实验报告

2020年春季学期
计算机学院《软件构造》课程
Lab 1实验报告

1 实验目标概述

通过求解三个问题,训练基本Java编程技能,能够利用Java OO开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。另一方面,利用Git作为代码配置管理的工具,学会Git的基本使用方法。
基本的Java OO编程
基于Eclipse IDE进行Java编程基于JUnit的测试
基于Git的代码配置管理。

2 实验环境配置

简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
1.按照lab0.pdf中的过程对github进行配置。
2.下载eclipse并安装
3. http://web.mit.edu/6.031/www/fa18/getting-started
根据该网址进行实验环境的配置
4. https://git-scm.com/book/zh/v2
根据该网站进行git的配置
问题1:无法clonegit
地方在这里插入图片描述

https://blog.csdn.net/weixin_35125814/article/details/112995834
问题2:卡住了
在这里插入图片描述
进行eclipse 中junit 的调试
https://blog.csdn.net/qq_39209361/article/details/81297649

在这里给出你的GitHub Lab1仓库的URL地址(Lab1-学号)。
https://github.com/ComputerScienceHIT/HIT-Lab1-1190201923

3 实验过程

请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。

3.1 Magic Squares

通过对文件流的输入来构造数组,并检测该数组是否符合标准,还进行了有关Magic Squares 数组的构建,以及对函数的优化

3.1.1 isLegalMagicSquare()

按步骤给出你的设计和实现思路/过程/结果。
实现思路:1.确定文件有多少行
2.确定文件中每一行的数字之间是否以/t分开
3.确定文件有多少列,计算列和行是否相等
4.确定数有无小数或负数
5.计算每行之和,每列之和,以及两条对角线上的和,并检测它们是否相等。
过程:1. 在这里插入图片描述
2. 在这里插入图片描述
3. 在这里插入图片描述
该情况下发生错误只可能是数组越界,则catch并报错:行列数不相等。
4.在这里插入图片描述
5.在这里插入图片描述
结果:在这里插入图片描述

3.1.2 generateMagicSquare()

分析:1.在这里插入图片描述
该报错是因为在n等于偶数进行到i=n这一段时,由于上一个row = n-1,i==n时,row = n-1+1 = n, 使得i=n+1 的时候访问数组时越界,产生该错误
2. 在这里插入图片描述
产生该错误的原因是在new一个新数组时,数组的大小为负数
按步骤给出你的设计和实现思路/过程/结果。
思路:1、第一个错误为奇偶错误,故catch即可,若出错则必为n为偶数时访问数组越界。
2、函数流程图
在这里插入图片描述

  2、第二个错误是正负错误,故在函数一开始时检测n的正负即可。

过程:1、在数组运算过程中try并catch ,若catch 则n为偶数。
2、 在这里插入图片描述

https://blog.csdn.net/nmg10/article/details/70056619/

结果: 在这里插入图片描述

3.2 Turtle Graphics

在这里简要概述你对该任务的理解。

3.2.1 Problem 1: Clone and import

如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
1.git clone time out
https://blog.csdn.net/u014011112/article/details/52994425
2.git clone not found
https://blog.csdn.net/u014011112/article/details/52994425

3.解决上述问题以后,用git clone命令将文件下载到桌面
在这里插入图片描述

并将其导入到P2当中
导入P2过程中出现 在这里插入图片描述

将turtle修改为P2.turtle

3.2.2 Problem 3: Turtle graphics and drawSquare

代码: 在这里插入图片描述

运行结果: 在这里插入图片描述

3.2.3 Problem 5: Drawing polygons

在这里插入图片描述

找不到org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader的源
原来是jre库使用错误,更改为jre1.8即可
画一个正十边形和一个正方形的效果图如下
在这里插入图片描述

3.2.4 Problem 6: Calculating Bearings

在这里插入图片描述

3.2.5 Problem 7: Convex Hulls

思路:
1.首先遍历所有的点,找到最左下角的点
在这里插入图片描述

2.以找到的点为基点,y轴正向为目前偏移角,开始依次找顺势针转角最小的点,记录这个点并将他加入到凸包集合中,以这次的偏向角累加上之前的角度度作为下一次的目前偏向角。
在这里插入图片描述

3.循环直到再次遇到最左下角为止退出
在这里插入图片描述

3.2.6 Problem 8: Personal art

在这里插入图片描述
在这里插入图片描述

3.2.7 Submitting

如何通过Git提交当前版本到GitHub上你的Lab1仓库。
https://blog.csdn.net/wenb1bai/article/details/89363588
1.首先git clone
将GitHub 上面的文件下载到本地
2.然后git init 初始化仓库
3.之后将文件移动到该目录下:我的是HIT-Lab1-1190201923
4.之后进行git add . 将本地仓的内容全部加入到暂存队列当中
(此时可以通过 git status 来查看自己的提交的文件所在的状态)
5.然后使用 git commit 可以上传到本地仓中
6.之后使用git push 可以将本地仓中的内容上传到GitHub 上面去啦。
git push 常用指令(https://www.cnblogs.com/qianqiannian/p/6008140.html)

3.3 Social Network

本任务主要是进行对于人际关系图的构建,说到图就不得不提图的DFS和BFS了,这两种算法属于图里面经常使用的搜索算法。关于本任务可以先观察示例和示意图,对于实现以下的功能有很好的帮助。

3.3.1 设计/实现FriendshipGraph类

观察给的示例代码,发现我们需要实现的功能有:添加顶点,添加边,检测顶点是否有重合,并且还要计算这两点之间的距离,使用到了BFS算法。
首先声明两个集合,一个是personList ,用于存放Person类,另一个是nameList,用于存放人名,主要作用是来检测是否有重复的人。
在这里插入图片描述

2.如果已经存在该人名则退出程序输出程序错误信息,否则将该人加入到personlist中,并将其名字加入到namelist当中。
在这里插入图片描述

3.添加边的代码是将第二个人加入到第一个人的好友列表里(像极了qq)
在这里插入图片描述

4.在这里插入图片描述

3.3.2 设计/实现Person类

3.3.3 设计/实现客户端代码main()

代码:在这里插入图片描述

结果:在这里插入图片描述

3.3.4 设计/实现测试用例

思路如图:在这里插入图片描述

测试主要分5个用例
在这里插入图片描述

4 实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。

项目Value
电脑$1600
手机$12
导管$1
Column 1Column 2
centered 文本居中right-aligned 文本居右
日期时间段任务实际完成情况
2021-5-1918:00-20:55编写问题1的isLegalMagicSquare函数并进行测试,进行eclpise的编程环境的调整,超时一小时完成
2021-5-1921:08~21:38进行git,JUnit的调试以及问题1的调试 git遇到困难,未完成。
2021-5-1921:40~22:15进行Junit的调试 遇到困难,未完成
2021-5-207:10~8:32进行问题1的generateMagicSquare函数的编写并测试,绘制该函数的流程图并撰写实验报告超时半小时完成
2021-5-208:40~9:23进行P2的rules导入以及turtle导入,超时20min完成
2021-5-2013:00~14:21完成Junit 的调试以及problem3~6的书写,git测试成功超时30min完成
2021-5-2018:00~21:04完成problem7的书写超时1h完成
2021-5-218:20~9:17完成了Social Network 基本函数的书写按时完成
2021-5-2115:00~16:26完成了有关Social Network 的测试,并进行了实验报告的书写按时完成
2021-5-2116:35~17:32完成P3的test 的编写,以及git上面的提交

5 实验过程中遇到的困难与解决途径

遇到的难点解决途径
环境不好配置上csdn查找,或者与同学老师进行交流
java语法一窍不通去图书馆借书,自学java,和同学交流,上网查资源
git使用不熟练自己创建很多库并练习git库的使用
实验进度缓慢生怕完不成把ddl设置在周五晚上,不断赶时间去实现。

6 实验过程中收获的经验、教训、感想

6.1 实验过程中收获的经验和教训

多交流多交流多交流!!!
csdn上面的好多好多好多大佬啊
算法知识实在是太欠缺了
自学能力也非常重要!!!
不听音乐写代码好像还挺快的

6.2 针对以下方面的感受

(1) Java编程语言是否对你的口味?
非常好用,如果能熟练使用继承和多态啥的,我感觉我的代码能力能更上一层楼,java 的OOP能让我更好的理解和分析一个物体,或者一件事物的所有属性,现在看到一个物体就开始想这个物体有哪些属性,可以对其有哪些方法,实现这些方法需要什么样的数据结构,需要用到哪些已经学到的数学物理生物化学知识,怎样定义这个方法里面的元素能够更好的理解这个方法
通过对于java 的学习,感觉对于万事万物的理解能够更加的具体化,思考问题也能够更加全面,更好的建立了我的计算思维。
(2) 关于Eclipse IDE
还挺好用的,感觉有些像Code blocks 但是其中的库的引用可以直接从网络上面下载。
(3) 关于Git和GitHub
虽然现在还没体会到版本更新和迭代的好处,但是我相信在未来的某一天,我会非常崇拜想出git 的人的,因为版本的管理和选择,在今后的生活中我感觉我也可以用到这种思想。
github也很好啊,能在网络上和各种大牛进行资源共享,而且是完全开源的啥也有,什么java python 啥的都非常方便。
(4) 关于CMU和MIT的作业
希望能有多一些HIT自己的作业,咱计算机这么牛为啥不能多整点具有哈工大精神的作业呢。
(5) 关于本实验的工作量、难度、deadline
刚开始起步非常困难,因为全都是新接触的,所以就非常担心完不成,到后面就如鱼得水了,能够很好的进行代码的编写。
关于deadline
只要把自己的deadline 设置在官方的deadline 的前两天,并且努力完成,就能提前在deadline之前完成,这样还能空出来一到两天进行整个思路的梳理,如果发现错误也能及时的更改,自己也能提升很多。
反之,卡着点完成的项目,一来项目的质量变差,二来就是完全为了完成项目而去完成,本身的乐趣也就丧失了,或许到最后变成了竹篮打水一场空。
(6) 关于初接触“软件构造”课程
现在终于感觉到了是在为软件编程而不是为了实现一个方法而编程了,虽然对于版本的管理的思想并不是很深入,结合计算机系统所学的内容,感觉自己对于软件的多数功能的实现有了跟进一步的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值