2022软件构造lab1实验

这次实验最令我头疼的就是github的使用了,第一次用可算头疼死我了,从编写到上传,git用了我和做实验差不多的时间,这是实验报告,仅供参考。

1 实验目标概述......................................................................................................................................... 1

2 实验环境配置......................................................................................................................................... 1

3 实验过程.................................................................................................................................................. 1

3.1 Magic Squares.................................................................................................................................. 1

3.1.1 isLegalMagicSquare().................................................................................................. 1

3.1.2 generateMagicSquare()............................................................................................... 1

3.2 Turtle Graphics................................................................................................................................. 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

3.2.7 Submitting................................................................................................................................. 2

3.3 Social Network................................................................................................................................. 2

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

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

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

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

  1. 实验目标概述

根据实验手册简要撰写。

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

基本的 Java OO 编程

基于 Eclipse IDE 进行 Java 编程

基于 JUnit 的测试

基于 Git 的代码配置管理

  1. 实验环境配置

简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给出屏幕截图。

特别是要记录配置过程中遇到的问题和困难,以及如何解决的。

       在官网上下载EclipseJDKGit并安装。

在为JDK配置环境变量的时候,应在系统环境变量中新建一个叫“JAVA_HOME”的环境变量,变量值为JDK的安装路径。然后在Path的环境变量中添加一个“%JAVA_HOME%bin”的变量值。

之前没有使用过Github,因此在github使用上受到了很大困扰。感谢https://blog.csdn.net/qq_35246620/article/details/66973794?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165101168416782388010771%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165101168416782388010771&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-66973794.142^v9^control,157^v4^control&utm_term=github&spm=1018.2226.3001.4187上给的指导,让我能快速使用github

在这里给出你的GitHub Lab1仓库的URL地址。

  1. 实验过程

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

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

    1. Magic Squares

幻方是一个有n*n个不同数字、且每行、每列和斜线上都有相同的和的方形结构。题目要求我们写出程序判断输入一个矩阵是否是幻方,并且构造幻方。

文件中给出了5个幻方,需要我们文件操作将其读入

      1. isLegalMagicSquare()

。本题要求在main()函数中调用五次isLegalMagicSquare()函数,将5个文本文件名分别作为参数输入进去,看其是否得到正确的输出。

首先,逐行阅读文件,从文件中可以看出大多数以\t分割,所以使用line.split("\t")方法划分得到一个字符串数组,并且利用整型输入与判断其是否小于0,来判断数字格式是否有问题。

通过输入时的ab两个变量来记录行列数值(line),判断行与列是否相等。

随后遍历每个元素,先求对角线,在逐行逐列判断是否相等,是返回true,否则返回false

 

然后便完成了。

 

      1. generateMagicSquare()

将1放在第一行的正中;

将后一个元素放在上一个元素的右上位置;

如果上一个元素在第一行(或最后一列),那么把后一个元素放在最后一行(或第一列),而列(或行)仍为原来右上位置所在列(或行);

如果按照以上规则确定的位置已被占用,那么把后一个元素放在上一个元素的正下方,即同列的下一行

 

原因:越界

 

    1. Turtle Graphics

根据MIT的实验要求和代码注释,完成TurtleSoup.java中待实现的方法,实现一个叫Turtle的绘图工具并用其进行创作。

      1. Problem 1: Clone and import

在本地创建文件夹git,在文件夹下创建目录Lab1,在Lab1中打开git Bash:

使用命令git init创建Lab1的仓库。

使用git add <filename>将文件添加到仓库的缓存区;

使用git commit -m "message"命令将缓存区的文件提交到git仓库。

使用git remote add origin 将本地仓库与Github的远程仓库链接;

使用git push -u origin master命令将本地仓库推送到Github的仓库上。

      1. Problem 3: Turtle graphics and drawSquare

在文件中找到了forward(units)和turn(degrees)两个方法,使用这两个方法实现drawSquare(Turtle turtle, int sideLength)方法,只需要前进sideLength长度,转过90°重复这个过程四次即可。

 

      1. Problem 5: Drawing polygons

已知正多边形边数的情况下计算正多边形的内角度。根据几何知识可以推导得公式,180.0−360.0/sides

使用该公式,补全calculateRegularPolygonAngle(),通过运行TurtleSoupTest中的Junit测试得:

 

除此以外的12边形的绘画

 

      1. Problem 6: Calculating Bearings

这里首先解决已知起点和当前朝向角度,想知道到终点需要转动的角度的问题由两个点的坐标计算夹角的正切值 (targetY-currentY) / (targetX-currentX),然后调用Math类的静态反三角函数方法Math.atan得到弧度值,然后除以Math.PI乘以180得到角度大小,如果得到的角度是负值,需要将其加360°转换为正值。然后判断当前的角度是否小于90°,小于就可以直接转换为极坐标下的极角,如果大于,就需要在计算后的值上加360°转换为正值。通过以上的转换成功的把角度转换到了极坐标下,直接相减得到需要转过的角度,结果是负值时需要加360°转换为正值。

 

      1. Problem 7: Convex Hulls

首先遍历所有的点,找到最左下角的点

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

循环直到再次遇到最左下角为止退出

 

 

      1. Problem 8: Personal art

 

      1. Submitting

如何通过Git提交当前版本到GitHub上你的Lab1仓库。

在本地创建文件夹git,在文件夹下创建目录Lab1,在Lab1中打开git Bash:

使用命令git init创建Lab1的仓库。

使用git add <filename>将文件添加到仓库的缓存区;

使用git commit -m "message"命令将缓存区的文件提交到git仓库。

使用git remote add origin 将本地仓库与Github的远程仓库链接;

使用git push -u origin master命令将本地仓库推送到Github的仓库上。

    1. Social Network

设计一张社交网络图,基于连接人与人,并且能计算任意两人之间的联系情况。网络图基于两个类,分别是FriendshipGraph类和Person类。

      1. 设计/实现FriendshipGraph类

在FriendshipGraph中声明List<Person>personList。

addVertex:根据要求,每个人应有唯一的名字,所以在将新的点加入personList之前通过遍历,检查这个人的名字是否在之前已经出现过,如果出现过,打印提示信息并结束程序的运行,如果没有,将这个人加入personList中。

addEdge:调用personaddFriend方法将第二个人加入到第一个人的朋友的集合中。

getDistance:先判断person1和person2是不是同一个人,如果是,距离为0;否则,利用BFS算法进行计算距离。

      1. 设计/实现Person类

private String name;------Person的名字

private List<Person>friendList;------Person所有的朋友

getName:获取姓名

List<Person> getFirendList:获取朋友列表

addFriend:添加朋友。

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

实验手册内给出:

 

      1. 设计/实现测试用例

给出你的设计和实现思路/过程/结果。

新建test文件夹,在P3下创建FriendshipGraphTest.java

引入junit包

仿照main函数给出样例:

 

通过

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值