2021年软件构造Lab 1实验报告



目录

 

1 实验目标概述... 1

2 实验环境配置... 1

3 实验过程... 1

3.1 Magic Squares. 1

3.1.1 isLegalMagicSquare(). 2

3.1.2 generateMagicSquare(). 2

3.2 Turtle Graphics. 5

3.2.1 Problem 1: Clone and import 5

3.2.2 Problem 3: Turtle graphics and drawSquare. 6

3.2.3 Problem 5: Drawing polygons. 7

3.2.4 Problem 6: Calculating Bearings. 7

3.2.5 Problem 7: Convex Hulls. 8

3.2.6 Problem 8: Personal art 10

3.2.7 Submitting. 10

3.3 Social Network. 11

3.3.1 设计/实现FriendshipGraph类... 11

3.3.2 设计/实现Person类... 13

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

3.3.4 设计/实现测试用例... 14

4 实验进度记录... 14

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

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

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

6.2 针对以下方面的感受... 16

 

 

1.实验目标概述

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

l 基本的Java OO编程

l 基于Eclipse IDE进行Java编程

l 基于JUnit的测试

l 基于Git的代码配置管理

2.实验环境配置

我跟着b站上的尚硅谷教程安装git,安装eclipse,安装idea,配置了jdk和junit没有什么困难。

在github上操作时老是遇到打不开的情况,后通过在csdn上的学习,知道了添加IP到hosts文件的操作,虽然很麻烦且不稳定,但是能进入github操作了。

 

3.实验过程

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

为了条理清晰,可根据需要在各节增加三级标题。

  1. Magic Squares

该任务就是判断从文件读入的是否是幻方,并且能够生成一个幻方并写入文件中,验证函数的正确性,期间要注意处理非法情况。

    2.isLegalMagicSquare()

思路、过程:

1. 读入文件:读入文件得到数阵行数、列数 以此我们创建一个行数*行数的二维数组,这避免了我们在一开始创建数组时数组过大。以\t为分隔符将每一个元素存入字符串数组a中,列数就是a.length,如果行数列数不相等提示错误返回false。通过Integer.valueOf()方法我们将字符转换为数字,通过try-catch利用了Integer.valueOf()方法中如果遇到了空格就会出错以此分辨是否有多个\t。最后判断是否有非整数或负数。

2. 验证行列对角线数之和相等:由于对角线只有两条,我们先检查它,找到和,再对每一行每一列遍历检查是否与其相等。

结果:

 

      1. generateMagicSquare()

思路:实验手册已经给出了函数,只需要我们增加部分功能:(1) 将产生的magic square写入文件\src\P1\txt\6.txt中;(2) 当输入的n不合法时(n为偶数、n为负数等),不要该函数抛出异常并非法退出,而是提示错误并“优雅的”退出——函数输出false结束。所以我们只需要在开始判断是否满足n的合法输入并且增加写入文件的操作。

 

过程:

  1. 生成幻方

当n为负数时,会提示数据为负数。是因为数组大小不能为负数。

当n为偶数时,会提示数组越界。已在代码处注释。

 

 

  1. 写入文件

与读取文件类似。注意要有IO异常处理。

 

结果:

   

    1. Turtle Graphics

本任务就是实现一个画图软件Turtle Graphic,其中大多数代码已经给出,我们所需要做的就是简单地填充函数然后实现简单的功能。

      1. Problem 1: Clone and import

在git bash中使用pull命令和clone命令将该任务的代码下载到本地。按照提供的项目目录将指定文件放入对应的位置,简单修改一下包名和import即可使用。

在本地创建git仓库、使用git管理本地开发的方法如下:

在本地创建git仓库、使用git管理本地开发(以下参考网络)

1. git init初始化本地仓库

2. git add remote origin 添加远程库源

3. 在远程仓库创建master分支

4. git pull origin master将远程仓库同步到本地

5. git add +文件名

6. git commit将本地文件加入本地仓库

7. git push将本地仓库同步到远程仓库。

      1. Problem 3: Turtle graphics and drawSquare

   边长函数已经给出,我们利用turtle.forward和turtle.turn让点前进相同长度转弯90度即可。

 

      1. Problem 5: Drawing polygons

 

 

根据几何性质求出正多边形内角,注意类型转换。

 

 

 

 

      1. Problem 6: Calculating Bearings

同样利用几何性质,使用atan2函数得到弧度,随后转换为角度,若是负值注意还要+360度。

 

       调用上一个函数我们得到下一个函数的结果。

      1. Problem 7: Convex Hulls

这个问题要求我们求一堆顶点的凸包集,要求集合中顶点数最小且围起来包含所有顶点。

想法很简单,我们先找到最左下角的顶点,它一定在我们的凸包集中,我们将它作为初始点加入到集合中。

接下来进行遍历,寻找那个与current顶点偏转角最小的target点,将其加入到我们的凸包集合中,直到我们要找的target顶点就是初始点,寻找结束,我们得到一个凸包集。

   

     这个任务花了我大量时间,虽然想法很简单但是我发现我的顶点集合老是莫名其妙的减少。通过print大法我找到了问题所在,在找到target点进行删除时,我将其从points里删掉了,这样做导致下次调用方法points里的点就少了并没有重置。随后我添加了一个all接受所有顶点,从all里删除target,问题解决。

      1. Problem 8: Personal art

 

       通过颜色的随机读取、直线长度的递增,我得到了如上图形。

      1. Submitting

打开Git Bash Here,输入以下命令行

(1) git add Lab1-1190201826

(2) git commit -m “备注” 将本地文件加入本地仓库

(3) git push将本地仓库同步到远程仓库

 

 

    1. Social Network

本次任务要求实现FriendshipGraph和Person两个类,利用图的模型进行图上的各种操作,在求最短距离时还要用到BFS。要注意对非法情况的处理。

      1. 设计/实现FriendshipGraph类
  1. 设计addVertex函数

此函数实现添加点的功能,需要检查是否名字和已有的点重复。

 

2.设计addEdge函数

此函数实现添加边的功能,需要检查两个点是否在图中,都在的话则添加一条边。

 

3.设计getDistance函数

此函数实现计算出两个点之间最短路径长度的功能,我们采用BFS算法实现此功能。通过队列存储广搜的遍历结果。

 

 

如果直到队列为空还没找到第二个人,我们就返回-1。

 

 

4.结果

 

      1. 设计/实现Person类

Person类很简单,存储名字即可。

 

 

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

 

       代码输出-1,在main()函数输出替换后的结果如下。

 

      1. 设计/实现测试用例

分别要对addVertex ,addEdge ,getDistance三个功能进行测试。

 

 

 

 

 

测试成功!

测试成功!

 

 

  1. 实验进度记录

请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。

每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。

不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。

日期

时间段

任务

实际完成情况

2021-05-15

18:30-21:30

编写问题1的isLegalMagicSquare函数并进行测试

按计划完成

2021-05-15

20:30-23:30

编写问题1的generateMagicSquare函数并进行测试

提前1小时完成

2021-05-17

21:30-22:30

完成P2的1-4

按计划完成

2021-05-19

20:30-23:30

完成P2的剩下所有

延期2小时完成

2021-05-20

19:30-22:30

完成P3的FriendshipGraph类

按计划完成

2021-05-21

21:30-22:30

完成P3的剩下所有

按计划完成

2021-05-22

8:30-9:30

完成实验报告上传到github

延期1小时完成

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

遇到的困难

解决途径

Github上不了

 

 

添加IP地址到hosts文件中

P2做凸包问题时陷入死循环

 

 

通过print大法发现点集元素不断减少,发现错误

在idea中Git上传不了代码

 

 

地址使用ssh而非https

  1. 实验过程中收获的经验、教训、感想
    1. 实验过程中收获的经验和教训
  1. 自己应该早点学java的,随便一个bug都能搞两小时;
  2. 遇到问题不能死扣,还是得多问同学学长,会茅塞顿开。
  3. 感觉到了java的方便之处,方法是真的多。
    1. 针对以下方面的感受
  1. Java编程语言是否对你的口味?

是,方法很多。

  1. 关于Eclipse IDE;

没怎么用,一直在用idea感觉很方便。

  1. 关于Git和GitHub;

感觉很神奇。。。

  1. 关于CMU和MIT的作业;

容易想复杂了,其实仔细想想不是很难。

  1. 关于本实验的工作量、难度、deadline;

大,挺难的对于我来说,还好。

  1. 关于初接触“软件构造”课程;

感觉到代码量很大,有很多任务在等着自己。。。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值