HIT软件构造lab1

目录

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
4 实验进度记录 3
5 实验过程中遇到的困难与解决途径 3
6 实验过程中收获的经验、教训、感想 3
6.1 实验过程中收获的经验和教训 3
6.2 针对以下方面的感受 3

1.实验目标概述

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

2.实验环境配置

简要陈述你配置本次实验所需开发、测试、运行环境的过程,必要时可以给出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
从班级群下载最新版本的eclipse,并在本地配置jdk环境,从Github官网下载gitbush

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

3.实验过程

3.1 Magic Squares
Magic Squares就是幻方,一种每个格子上都有数字的正方形,它的每行,每列,两条对线之和都相等。

3.1.1 isLegalMagicSquare()
这个方法从文件读入一个矩阵并判断是否幻方。
用bufferedreader一次读入一行,文件采用相对路径。
在里插入图片描述
使用split("\n")方法将长文本按矩阵划分成行保存进一个字符串数组String line[]
在这里插入图片描述
将字符换转换成int型整数,保存在二维数组int nums[][]中。

求幻方各行各列的和,验证是否相等
在这里插入图片描述
验证对角线之和是否相等
在这里插入图片描述
3.1.2 generateMagicSquare()

在这里插入图片描述
在这里插入图片描述
完成后把矩阵输出到文件中
在这里插入图片描述
3.2 Turtle Graphics

3.2.1 Problem 1: Clone and import

如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
从教学QQ群下载了原文件,使用eclipse建立相关文件夹后,把文件放到项目中的合适的文件夹中,刷新eclipse,修改包名后使用。因为自己的仓库已经克隆的本地,将教师的文件拷贝进去进行commit和push更新服务器代码。

3.2.2 Problem 3: Turtle graphics and drawSquare

在这里插入图片描述
Turtle.java已经定义了画图需要使用的接口,画图时直接调用就好。
(1)画正方形,就是先向前平移sideLength个单位,然后转90°,重复四遍。
(2)根据Turtle类,forward(int units) 方法的功能是向前平移units个单位;turn(double degrees) 方法是顺时针转90°

3.2.3 Problem 5: Drawing polygons

1)public static double calculateRegularPolygonAngle(int sides)
正sides边形内角公式:(边数-2)*180°/sides,随后side次前进转向
(2)public static int calculatePolygonSidesFromAngle(double angle)
正n边形边数公式为:sides=360/(180-angle)
(3)public static void drawRegularPolygon(Turtle turtle, int sides, int sideLength)
调用calculatePolygonSidesFromAngle函数,求出正多边形的内角度数,然后用画正方形的方法画正多边形,循环的次数改为sides

3.2.4 Problem 6: Calculating Bearings

public static double calculateBearingToPoint(double currentBearing, int currentX, int currentY, int targetX, int targetY)
先求当前点与目标点的连线与y轴夹角的正切值,tan=(targetX-currentX)/(targetY-currentY),然后调用Math库中的atan将其转化为弧度,再由公式——角度=弧度*180/PI——求得角度值,即为当前向量与y轴正方向的夹角,与currentBearing(当前方向)作差,得解。
(2)public static List calculateBearings(List xCoords, List yCoords)
这个函数的是计算一系列边构成的向量之间的夹角,得出方向转动的大小。使用上一个函数,计算出前一个向量到这个方向需要转动的角度。

3.2.5 Problem 7: Convex Hulls

运用Gift wrapping algorithm算法,每次选择转向角最小的点(同时距离最长的点),加入集合,求转向角函数直接使用的之前写好的calculateBearingToPoint函数,在循环中设置一个targetdis变量记录当前目标点的距离,如果之后出现了新的目标点,就用targetdis和计算得到的当前点的距离tempdis来比较进行取舍。

3.2.6 Problem 8: Personal art

调用drawRegularPolygon函数,循环:画四边形,转换颜色,边长增加,转一个小角度。
在这里插入图片描述
在这里插入图片描述
3.2.7 Submitting
如何通过Git提交当前版本到GitHub上你的Lab1仓库。
1.将完成的项目复制到本地仓库中,输入git add .将所有文件全部加入本地仓库;
2.输入 git commit -m “备注” 指令,将文件暂存到本地目录并且添加备注说明;
3.输入 git push -u origin master指令,将本地仓库同步到远程仓库。

3.3 Social Network

*3.3.1 设计/实现FriendshipGraph类

在这里插入图片描述
数据结构选择邻接表来实现。为每个成员创建一个List来存放他的朋友,用一个Map来存取这些映射关系。

用public void addVertex(Person person)插入节点(人物),public void addEdge(Person a, Person b);链接两个人物,表示人际关系,用邻接表的方式存储边
public int getDistance(Person a, Person b);可以用BFS,若没有关系则输出“-1”。默认边权为1,则在搜索到边时加1即可,搜索到目标点退出;特殊情况根据要求输出0或-1。

3.3.2 设计/实现Person类

每一个人名对应一个person类
在这里插入图片描述
*3.3.3 设计/实现客户端代码main()
*在这里插入图片描述
3.3.4 设计/实现测试用例
在这里插入图片描述
按照前面的约定验证a,b b,c c,d a,c b,d a,d 之间的距离即可

4 实验进度记录

在这里插入图片描述

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

在这里插入图片描述

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

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

实在对java不很熟悉,第一次实验过程中,有太多的东西需要开头学习和练习,ecplice,git,turtle,junit test 都是难点。遇到困难卡住不要害怕,尽力想办法去解决,如果实在解决不了再选择放弃。

6.2 针对以下方面的感受

(1) Java编程语言是否对你的口味?
我在使用中感觉java功能十分强大,及其有必要学习完善和熟练掌握
(2) 关于Eclipse IDE
还是比较好用的开发平台,挺不错的
(3) 关于Git和GitHub
很赞的平台,但是在家里上外网卡顿严重有点难受
(4) 关于CMU和MIT的作业
难度不小把,有一些问题很折磨人
(5) 关于本实验的工作量、难度、deadline
工作量相当不小了,难度对于我这种不熟悉java来说的人算大了
Deadline挺良心了,有充足的时间学习新知识然后解决问题
(6) 关于初接触“软件构造”课程
课程内容很高深,能接触到很多核心专业的东西了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值