HIT 软件构造 Lab1

这是一份关于HIT《软件构造》课程Lab1的实验报告,涉及Java基本编程、Eclipse IDE使用、JUnit测试、Git代码管理。实验内容包括:幻方判断、Turtle Graphics、多边形绘制、角度计算、凸包问题解决、社交网络的无向图实现。通过此次实验,学生掌握了Java面向对象编程、图形绘制、Git版本控制和算法实现等技能。
摘要由CSDN通过智能技术生成

2020年春季学期

计算机学院《软件构造》课程

Lab1实验报告

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

基本的JavaOO编程
基于EclipseIDE进行Java编程
基于JUnit的测试
基于Git的代码配置管理

2 实验环境配置
从官网下载JDK1.8,eclipse ide及git,eclipse自带Junit4,lab0实验报告提供了诸多参考资料,未遇到明显困难。

Github Lab1仓库 的URL地址:https://github.com/ComputerScienceHIT/Lab1-1180300612

3 实验过程

3.1 Magic
Squares

该实验要求实现判断从文件读入的行列式是否为幻方,理解给定的生成幻方函数的算法,并判断其生成的幻方是否符合要求。

3.1.1 isLegalMagicSquare()

1.利用相对路径从给定的5个文本中读取数据
在这里插入图片描述
2.分两次切割数据并存入二维数组中
在这里插入图片描述
在这里插入图片描述

3.一个矩阵为幻方需要每行每列及两条对角线之和相同,只需要分别判断是否满足即可
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.有的数据会有更容易判断的方法,例如存在负数,非整数,或者不为矩阵(行列不等),我们可以在判断上面三种条件之前进行判断,可以节省成本

在这里插入图片描述

在这里插入图片描述

5.当矩阵满足三个条件就说明是幻方
在这里插入图片描述

3.1.2 generateMagicSquare()

1.为给定代码添加中文注释

在这里插入图片描述

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

当n为偶数时则会提示数组越界,这是因为row在递增时会出现越界在这里插入图片描述

3.添加try和catch语句即可
在这里插入图片描述在这里插入图片描述

4.以相对路径进行存储
在这里插入图片描述在这里插入图片描述

5.对产生的幻方进行测试
在这里插入图片描述

3.2 Turtle
Graphics

在给定的框架下,利用已经完成的类和函数完成部分未完成的函数,并通过Junit测试

3.2.1 Problem 1: Clone and import在这里插入图片描述

从Github上下载zip,在本地解压后导入到eclipse的现有项目中

Git init 初始化仓库

Git 上创建ssh密匙

然后在github上添加密匙

在git上添加仓库的URL

3.2.2 Problem 3: Turtle graphics and drawSquare

画一个正方形
在这里插入图片描述在这里插入图片描述

3.2.3 Problem 5: Drawing polygons

画多边形
在这里插入图片描述

计算角度
在这里插入图片描述

进行绘制

在这里插入图片描述

3.2.4 Problem 6: Calculating Bearings

计算转动角
在这里插入图片描述

根据提示利用math库中的atan2实现,需要注意的是计算结果小于0的情况

计算转动集
在这里插入图片描述

循环调用计算转动角的函数实现,初始方位记为0,将结果存入list中

3.2.5 Problem 7: Convex Hulls

求解凸包问题,根据提示使用gift-wrapping algorithm算法

1.创建两个数组来存储点的横纵坐标

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

  1. 选取初始点(横坐标最小且纵坐标最小)在这里插入图片描述

  2. 将初始点添加到set中

  3. 选取与当前点转动角最小且距离最远的点加入set中,将current值加上转动角,将该点视作新的当前点重复操作,直到下一次选取的点为初始点在这里插入图片描述

5.全部problem的Junit测试结果
在这里插入图片描述

3.2.6 Problem 8: Personal art

通过不断增长以及更换颜色,并每次旋转120度实现由内向外的螺旋三角图形在这里插入图片描述在这里插入图片描述

3.2.7 Submitting

先用add添加文件夹

然后用commit -m更新至本地仓库

最后用push推送到云端
在这里插入图片描述在这里插入图片描述

3.3 Social
Network

要求实现一个无向图(但要求添加边需双向添加),可以加入点,加入边,且点名称不可重复,可以计算两点间的最短路径。

3.3.1 设计/实现FriendshipGraph类

用三个函数实现三个功能:增加点,增加边,计算两点间的最短路径在这里插入图片描述

修改邻接表来增加边
在这里插入图片描述

增加点时判断是否重复名字

根据实验指导,通过广度优先搜索算法计算两点间的最短路径在这里插入图片描述

3.3.2 设计/实现Person类

存储姓名,提供一个返回的功能
在这里插入图片描述

3.3.3 设计/实现客户端代码main()
在这里插入图片描述

仅在实验手册的基础上增加对邻接矩阵的初始化

3.3.4 设计/实现测试用例
在这里插入图片描述

测试加重复名的点
在这里插入图片描述

测试加边
在这里插入图片描述

测试计算两点最短距离
在这里插入图片描述


Junit测试结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值