2020年春季学期
计算机学院《软件构造》课程
Lab 1实验 告
目录
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
- 实验目标概述
本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开
发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够
为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。
另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。
? 基本的 Java OO 编程
? 基于 Eclipse IDE 进行 Java 编程
? 基于 JUnit 的测试
? 基于 Git 的代码配置管理
- 实验环境配置
下载,配置jdk
下载,安装eclipse
下载,安装git
eclipse连接到github
在这里给出你的GitHub Lab1仓库的URL地址
https://github.com/ComputerScienceHIT/Lab1-1180300122.git
- 实验过程
请仔细对照实验手册,针对四个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但无需把你的源代码全部粘贴过来!)。
为了条理清晰,可根据需要在各节增加三级标题。
-
- Magic Squares
幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。
-
-
- isLegalMagicSquare()
-
现将文件按行读取成字符串,在按照split(“t”)分成数字字符串,将其转为int型检查错误输入,存在二维数组里,判断是否是方阵然后计算行和,列和,对角线和。若相等则是幻方。
-
-
- generateMagicSquare()
-
第一个数放在(1,n/2),之后每个数在前一个数上一行对应位置的右边。超出上面放在底边,超出右边放在最左。进行n^2次,使行和,列和,对角线和相等。
java.lang.ArrayIndexOutOfBoundsException——数组越界
java.lang.NegativeArraySizeException——试图创建大小为负的数组
-
- Turtle Graphics
调用给出的Turtle,Point类,填充TurtleSoup.java中给出的各个函数,使之完成注释中给出的函数功能。
-
-
- Problem 1: Clone and import
-
如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。
在本地创建git仓库:
在当前目录打开Git Bash; git init指令 将当前目录创建为本地仓库;
和github仓库建立远程链接 将本地秘钥key值添加到github的SSH设置
将完成的项目复制到本地仓库中,输入git add .将所有文件全部加入本地仓库; git commit -m “备注” 指令,将文件暂存到本地目录并且添加备注说明; git push -u origin master指令,将本地仓库同步到远程仓库。
-
-
- Problem 3: Turtle graphics and drawSquare
-
绘制正方形,即前进边长后转向九十度,重复四次
-
-
- Problem 5: Drawing polygons
-
public static double calculateRegularPolygonAngle(int sides)
根据边数计算内角 (边数-2)*180°/sides
public static int calculatePolygonSidesFromAngle(double angle)
根据内角判断边数 360/(180-angle) (注意向上取整)
public static void drawRegularPolygon(Turtle turtle, int sides, int sideLength)
绘制多边形,注意转向外角
-
-
- Problem 6: Calculating Bearings
-
public static double calculateBearingToPoint(double currentBearing, int currentX, int currentY, int targetX, int targetY)
根据当前位置,方向,目的地判断转向,atan2()计算两点连线和x轴夹角,转化成y轴夹角,算出和当前方向差值,即为转向角。
public static List
调用转向角函数,将list中存的点的数据读取,返回每次转的角度list
默认方向是y正方向,由于转向角函数输入方向是y正顺时针方向,要记录转向信息,转化成当前方位角。
-
-
- Problem 7: Convex Hulls
-
先对所有给的点集进行排序,先按照x坐标排序,如果x相同再按照y排序,找到最左最下下的点,该点一定在凸包上 利用calculateBearingToPoint函数计算夹角,要注意的是该函数计算的是和y正的夹角,需要分上下半个图形来计算
上半找所有点中跟这个点夹角最小的点,以最右面的一个点为界,下半图形夹角需要大于180度,并找最小的角直到又回到最初的点,便可以获得凸包集合。
另外由于test是地址检测,所以只保留数值再添加到set里是过不了的
必须传递原来的地址
-
-
- Problem 8: Personal art
-
调用了绘制正方形和多边形的函数,绘制彩色图形。
-
-
- Submitting
-
git add .将所有文件全部加入本地仓库; git commit -m “备注” ,将文件暂存到本地目录并且添加备注说明; git push -u origin master,将本地仓库同步到远程仓库。
-
- Social Network
构建person类和friendshipgragh类,以及类中的方法,使其能计算 交 络距离;
-
-
- 设计/实现FriendshipGraph类
-
使用hashset储存全部的人的信息,addvertex向其中添加元素,注意在 交 络中不能重名,重名则抛出异常,addedge添加关系,关系信息存在person中,为支持有向图,添加的为单向关系
Clean用于清除 交 络访问信息,在搜索中用到。
getDistance获取两个人的最短距离,通过在无向图中广度优先搜索直到找到目标,辐射的层数即距离,层数信息存在hashmap中,注意自己到自己的距离为0,并提示信息
-
-
- 设计/实现Person类
-
person中存放姓名和关系(单向),访问信息(在搜索时用到)
关系存在hashset中,getname getfriends获取名字和关系visited标记访问,clean清除访问信息;addfriend添加关系中的元素重复添加算一个,被addedge调用
-
-
- 设计/实现客户端代码main()
-
如果注释rachel到ross的关系,对于rachel,跟任何人都没有关系,除了到自身到其他人距离均为-1;
将ross改成rachel,在新建person时起名是合法的,在将其添加到 交 络时,由于 络中存在重名的人会抛出异常,终止程序;
-
-
- 设计/实现测试用例
-
设计了一个有环路和不可达的测试用例,手动模拟搜索
检测了在 交 中添加重名的异常
- 实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 |
时间段 |
任务 |
实际完成情况 |
2020-02-26 |
14:00-15:30 |
编写问题1的isLegalMagicSquare函数并进行测试 |
遇到困难,未完成 |
2020-03-5 |
13:00-18:30 |
改bug,测试问题1,编写问题2 |
遇到困难,未完成 |
2020-03-11 |
13:00-18:30 |
编写问题3的函数并进行测试 |
完成 |
2020-03-1 |
10:00-15:00 |
完成凸包 |
完成 |
- 实验过程中遇到的困难与解决途径
遇到的难点 |
解决途径 |
不适应java的编程习惯
|
学习各种数据类型在java中使用的实例 尝试理解类,方法 学习使用异常控制 |
实验导入,目录结构不知道怎么建立
|
询问同学,查阅相关资料 |
Git的使用
|
自行查阅资料 |
-
实验过程中收获的经验、教训、感想
- 实验过程中收获的经验和教训
对于不熟悉的类要搞清楚再用,string在java中不是数据类型,不是字符数数组,对于类直接将类赋值给另一个类实际上是相同的地址。
学习了hashset,hashmap,图形化界面等知识。
-
- 针对以下方面的感受
- Java编程语言是否对你的口味li>
Java是我接触的不多的面向对象编程,不太习惯
- 关于Eclipse IDE
使用方便
- 关于Git和GitHub
可以很好地管理文件的版本
- 关于CMU和MIT的作业
具有一定的难度,涉及到很广的知识
- 关于本实验的工作量、难度、deadline
对于没接触过java新手来讲,bug层出不穷,对于类的理解不够,导致各种错误使用,很多东西只是会用,不理解原理导致在细节上出问题,工作量倍增,学习了很多新知识,
- 关于初接触“软件构造”课程
有一定的难度
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!