软件构造Lab1

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

目录
1 实验目标概述
2 实验环境配置
3 实验过程
3.1 Magic Squares
3.1.1 isLegalMagicSquare()
3.1.2 generateMagicSquare()
3.2 Turtle Graphics
3.2.1 Problem 1: Clone and import
3.2.2 Problem 3: Turtle graphics and drawSquare
3.2.3 Problem 5: Drawing polygons
3.2.4 Problem 6: Calculating Bearings
3.2.5 Problem 7: Convex Hulls
3.2.6 Problem 8: Personal art
3.2.7 Submitting
3.3 Social Network
3.3.1 设计/实现FriendshipGraph类
3.3.2 设计/实现Person类
3.3.3 设计/实现客户端代码main()
3.3.4 设计/实现测试用例
4 实验进度记录
5 实验过程中遇到的困难与解决途径
6 实验过程中收获的经验、教训、感想
6.1 实验过程中收获的经验和教训
6.2 针对以下方面的感受

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

2实验环境配置
1.首先下载相应的JDK版本(这里我刚开始下载的是15,后来又换成了11)
2.我选择的IDE刚开始是eclipse,后来发现eclipse无法完成项目目录的建立,于是又装了IDEA,在装完IDEA后,才逐渐建立了项目目录。在下图的框图内调整目录结构即可。

3.在命令行中使用git clone指令建立自己的本地仓库,将项目建立在本地仓库里即可。使用git add . 指令将所有文件加入staging区即可。不得不说github太难连上了,得重复好几次有时才可以连上。
3实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
3.1Magic Squares
这个题目,我觉得主要是为了让我们熟悉基本的java操作,熟悉文件的读入与写入等操作,熟悉对字符串的处理以及对数组的处理等操作。
3.1.1isLegalMagicSquare()
1.首先处理输入输出:我选用了Scanner类来处理从文件读入数据的问题,一次读取一行,通过hasnext来判断文件是否读取完毕。
注意,这里的路径要选取相对路径,即工作目录,使用getProperty函数达到自己的目的。
2.将字符串数组列表中的每个字符串通过split函数分成单个字符,同时通过能不能用空格以及小数点划分来判断输入数组是否符合基本要求,同时统计每行的数字个数,判断这是不是一个矩阵。
3.再通过Integer.valueof函数将单个字符转化为数字,同时存储在字符串数组中。
4.然后将每行相加,每列相加,对角线相加判断这是不是一个MagicSquare。
3.1.2generateMagicSquare()
按步骤给出你的设计和实现思路/过程/结果。
1.首先给出异常处理,当n小于0以及n为偶数的时候,都会导致数组越界,所以我们处理这两种异常情况,然后通过给出的算法构造矩阵。
2.这里我们使用输出流将我们构造的矩阵输入到文件。
3.通过上一个函数判断这个矩阵是不是MagicSquare。
3.2Turtle Graphics
这个任务只要依照他的提示一步一步完成即可,难度不是很大。只有Convex Hulls这个任务有点难度。
3.2.1Problem 1: Clone and import
直接使用的老师的资料,下载之后复制粘贴到自己的项目中即可。记得要git add .哟!
3.2.2Problem 3: Turtle graphics and drawSquare
画一个矩形完事。
3.2.3Problem 5: Drawing polygons
首先完成前两个函数。
然后调用前一个函数,画出多边形。
3.2.4Problem 6: Calculating Bearings
要做出这一问首先需要完成前一个函数,计算出两个向量的夹角。
这里我们调用anta2这个函数计算出他与x轴正向的夹角,然后转换为与y轴正向的夹角,最后需要将不符合答案范围的角度转换为正确答案。
有了这个函数,我们就可以调用他来完成我们的问题,通过一个循环解决我们的问题。
3.2.5Problem 7: Convex Hulls
这个问题的算法很有意思,查阅Gift-wrapping算法,从最左下角的点开始,每次都寻找与上一条边(开始时是x轴)最小夹角的点加入答案集合,直到下一个点就是起点为止,调用计算向量角度的函数解决这个问题,这里面还需要注意处理三个点在一条线上的特殊情况。
3.2.6Problem 8: Personal art
这一问我画了五种颜色组成的五角星。
3.2.7Submitting
先git commit 到本地仓库,然后git push到github远程仓库。
3.3Social Network
设计两个类,首次体验面向对象编程。
3.3.1设计/实现FriendshipGraph类
给出你的设计和实现思路/过程/结果。
这个类中我们主要需要实现广度优先搜索,而构建朋友与朋友之间的关系我们调用每个人的addfriend方法,然后通过广度优先计算出人与人之间的距离。
3.3.2设计/实现Person类
首先考虑类中需要有哪些实例变量,然后根据具体的实例变量构造相应的方法。
3.3.4设计/实现测试用例
给出你的设计和实现思路/过程/结果。
通过构造test文件,设计一个关系图,检测具体方法:
public void testAddVertex() throws Exception {
FriendshipGraph graph=new FriendshipGraph();
Person x=new Person(“lily”);
graph.addVertex(x);
assertEquals(x,graph.Vertex.get(graph.Vertex.size()-1));
}

public void testAddEdge() throws Exception {
//TODO: Test goes here…
FriendshipGraph graph=new FriendshipGraph();
Person x=new Person(“lily”);
Person y=new Person(“Tom”);
graph.addVertex(x);
graph.addVertex(y);
graph.addEdge(x,y);
assertEquals(y,x.getFriendship().get(x.getFriendship().size()-1));

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值