软件lab1

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

 

 

  1. 实验目标概述

本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO

发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够

为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。

另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法。

? 基本的 Java OO 编程

? 基于 Eclipse IDE 进行 Java 编程

? 基于 JUnit 的测试

? 基于 Git 的代码配置管理

  1. 实验环境配置

下载,配置jdk

下载,安装eclipse

下载,安装git

eclipse连接到github

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

https://github.com/ComputerScienceHIT/Lab1-1180300122.git

  1. 实验过程

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

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

    1. Magic Squares

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。

      1. isLegalMagicSquare()

现将文件按行读取成字符串,在按照split(“t”)分成数字字符串,将其转为int型检查错误输入,存在二维数组里,判断是否是方阵然后计算行和,列和,对角线和。若相等则是幻方。

      1. generateMagicSquare()

第一个数放在(1,n/2),之后每个数在前一个数上一行对应位置的右边。超出上面放在底边,超出右边放在最左。进行n^2次,使行和,列和,对角线和相等。

java.lang.ArrayIndexOutOfBoundsException——数组越界

java.lang.NegativeArraySizeException——试图创建大小为负的数组

    1. Turtle Graphics

调用给出的Turtle,Point类,填充TurtleSoup.java中给出的各个函数,使之完成注释中给出的函数功能。

      1. 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指令,将本地仓库同步到远程仓库。

      1. Problem 3: Turtle graphics and drawSquare

   绘制正方形,即前进边长后转向九十度,重复四次

      1. 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) 

绘制多边形,注意转向外角

      1. Problem 6: Calculating Bearings

public static double calculateBearingToPoint(double currentBearing, int currentX, int currentY, int targetX, int targetY)

根据当前位置,方向,目的地判断转向,atan2()计算两点连线和x轴夹角,转化成y轴夹角,算出和当前方向差值,即为转向角。

public static List calculateBearings(List xCoords, List yCoords)

调用转向角函数,将list中存的点的数据读取,返回每次转的角度list

默认方向是y正方向,由于转向角函数输入方向是y正顺时针方向,要记录转向信息,转化成当前方位角。

      1. Problem 7: Convex Hulls

先对所有给的点集进行排序,先按照x坐标排序,如果x相同再按照y排序,找到最左最下下的点,该点一定在凸包上 利用calculateBearingToPoint函数计算夹角,要注意的是该函数计算的是和y正的夹角,需要分上下半个图形来计算

上半找所有点中跟这个点夹角最小的点,以最右面的一个点为界,下半图形夹角需要大于180度,并找最小的角直到又回到最初的点,便可以获得凸包集合。

另外由于test是地址检测,所以只保留数值再添加到set里是过不了的

必须传递原来的地址

 

      1. Problem 8: Personal art

调用了绘制正方形和多边形的函数,绘制彩色图形。

      1. Submitting

git add .将所有文件全部加入本地仓库; git commit -m “备注” ,将文件暂存到本地目录并且添加备注说明; git push -u origin master,将本地仓库同步到远程仓库。

    1. Social Network

构建person类和friendshipgragh类,以及类中的方法,使其能计算 交 络距离;

      1. 设计/实现FriendshipGraph

使用hashset储存全部的人的信息,addvertex向其中添加元素,注意在 交 络中不能重名,重名则抛出异常,addedge添加关系,关系信息存在person中,为支持有向图,添加的为单向关系

Clean用于清除 交 络访问信息,在搜索中用到。

 getDistance获取两个人的最短距离,通过在无向图中广度优先搜索直到找到目标,辐射的层数即距离,层数信息存在hashmap中,注意自己到自己的距离为0,并提示信息

      1. 设计/实现Person

person中存放姓名和关系(单向),访问信息(在搜索时用到)

关系存在hashset中,getname getfriends获取名字和关系visited标记访问,clean清除访问信息;addfriend添加关系中的元素重复添加算一个,被addedge调用

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

如果注释rachel到ross的关系,对于rachel,跟任何人都没有关系,除了到自身到其他人距离均为-1;

将ross改成rachel,在新建person时起名是合法的,在将其添加到 交 络时,由于 络中存在重名的人会抛出异常,终止程序;

      1. 设计/实现测试用例

设计了一个有环路和不可达的测试用例,手动模拟搜索

检测了在 交 中添加重名的异常

  1. 实验进度记录

请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。

每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。

不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。

日期

时间段

任务

实际完成情况

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

完成凸包

完成

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

遇到的难点

解决途径

 

不适应java的编程习惯

 

学习各种数据类型在java中使用的实例

尝试理解类,方法

学习使用异常控制

 

实验导入,目录结构不知道怎么建立

 

 

 

询问同学,查阅相关资料

 

Git的使用

 

自行查阅资料

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

对于不熟悉的类要搞清楚再用,string在java中不是数据类型,不是字符数数组,对于类直接将类赋值给另一个类实际上是相同的地址。

学习了hashset,hashmap,图形化界面等知识。

    1. 针对以下方面的感受
  1. Java编程语言是否对你的口味li>

Java是我接触的不多的面向对象编程,不太习惯

  1. 关于Eclipse IDE

使用方便

  1. 关于Git和GitHub

可以很好地管理文件的版本

  1. 关于CMU和MIT的作业

具有一定的难度,涉及到很广的知识

  1. 关于本实验的工作量、难度、deadline

对于没接触过java新手来讲,bug层出不穷,对于类的理解不够,导致各种错误使用,很多东西只是会用,不理解原理导致在细节上出问题,工作量倍增,学习了很多新知识,

  1. 关于初接触“软件构造”课程

有一定的难度

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月14日
下一篇 2020年2月14日

相关推荐