软构实验(一)博客

这篇博客详细介绍了使用Java进行Magic Squares判断与Turtle Graphics图形绘制的实验过程,包括Magic Squares的isLegalMagicSquare()和generateMagicSquare()函数实现,以及Turtle Graphics中多个问题的解决方案,如正多边形的绘制和计算夹角等。此外,还涉及了社交网络图的实现与测试用例设计。
摘要由CSDN通过智能技术生成

目录

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/IDEA IDE 进行 Java 编程

⚫ 基于 JUnit 的测试

⚫ 基于 Git 的代码配置管理

  1. 实验环境配置

实验环境是课程开始前配置好的,之前的项目经历需要Java环境以及git和GitHub。

GitHub Lab1仓库的URL地址:https://github.com/ComputerScienceHIT/HIT-Lab1-1190200924

  1. 实验过程

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

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

    1. Magic Squares

Magic Squares指的是一个正矩阵且矩阵的每行、每列以及对角线的和相等。即n阶Magic Squares便是指n×n的 一个矩阵且该矩阵的每行、每列以及对角线的和为一个常数且相等。

      1. isLegalMagicSquare()

此函数要求实现的功能是判断一个各元素已知的矩阵是否为Magic Squares。

这部分具体的任务是对提供的5个(.txt格式)矩阵进行判断,逐个判断是否为满足要求的Magic Squares。首先程序要将目录文件夹内的矩阵(.txt格式)文件读入到程序中,并存储到二维数组中,并在读入的过程中计算待判断矩阵的阶数。

将待判断矩阵(.txt格式)读入程序数组后,便要判断该矩阵是否为Magic Squares。判断标准如下:

  1. 判断目标矩阵是否为正矩阵(即行数与列数相等);

  1. 若满足上一步,则计算矩阵的第一行之和,并将其结果作为参考标准;

  1. 使用循环的结构便利计算每行、每列以及对角线之和,并与ans做比较,若出现与ans不相等的情况,则return false;

  1. 若满足Magic Squares的各项要求,则return true。

将已给出的5个矩阵输入程序,得到的结果为(红色字体为false的错误提示信息):

      1. generateMagicSquare()

此函数要求按照输出的阶数int n生成一个n阶的Magic Squares,并输出存储到6.txt文件中。

整个n阶的Magic Squares生成程序在实验手册中已给出,生成程序的整个程序逻辑为:

生成要求的n阶Magic Squares后,要将magic二维数据所存储的Magic Squares矩阵改变输出流,输出到6.txt文件中。

       输出到终端和文件中的结果为(判断为true):

                     终端的输出

                     6.txt中的输出

    1. Turtle Graphics

根据给出的代码及其注释,对代码的函数进行补全,实现各个函数的具体功能。完成各个基本绘图函数的功能后,利用这些基础的绘图函数,编写属于自己的个性化代码,绘制出自己设计的图形。

      1. Problem 1: Clone and import

从GitHub获取源码:进入使用手册给出网址,然后下载。

从本地创建git仓库:

       (1)git init 初始化本地仓库

       (2)git add remote 添加远程库源

       (3)创建master分支

       (4)git pull origin master 将远程仓库同步到本地

       (5)git add * ——> git commit -m ——> git push 将本地文件加入到本地仓库,将本地仓库同步到远程仓库

      1. Problem 3: Turtle graphics and drawSquare

首先,forword(int sidelength)方法是将turtle前进距离sidelength,turn(double degrees)是将turtle的前进方向顺时针选择degrees度。故要想此函数实现画出一个正方形的功能,只需要在turtle每次调用forward方法后调用turn方法旋转90度即可,可利用循环结构实现。

绘制四边形的结果:

      1. Problem 5: Drawing polygons
  1. 补全calculateRegularPolygonAngle函数的代码,根据已知条件正多边形的边数计算正多边形的内角度数。

  1. 补全calculatePolygonSidesFromAngle函数的代码,根据已知条件正多边形的内角度数计算正多边形的边数。

(3)补全drawRegularPolygon函数的代码,根据给出的正多边形边数画出指定的正多 边形

       正八边形的测试结果:

      1. Problem 6: Calculating Bearings
  1. 补全calculateBearingToPoint函数的代码,该函数功能为计算当前点朝向的向量与当前点朝向目标点构成的向量之间的夹角。

  1. 补全calculateBearings函数的代码,该函数的功能为对列表中的每两个相邻点调用calculateBearingToPoint函数计算夹角,保存到列表中并返回。

      1. Problem 7: Convex Hulls

补全convexHull函数的代码,该函数的功能为根据给出的参数求出包围所有点的凸包。

测试结果如下:

      1. Problem 8: Personal art

该函数是基于已有的函数、方法,设计一个自己的图形。

  1. 通过增大正多边形边数的方式构造近似为圆的图形;
  2. 参照计算正多边形内角和的思路,在空间内角度均匀分布圆形;
  3. 通过随机取数的方法改变圆的颜色。

构造出的图形效果如下:

      1. Submitting

通过git add *——>git commit -m “”——>git push提交到Lab1仓库。

    1. Social Network

该任务要求利用图的结构实现一张人际网络图,代码本质为实现有向图,但若想达到无向图的效果则在建立图中边的关系时要采用双向建立的方式。即如果要在两个person对象A和B之间增加一条社交关系,那么需要同时调用addEdge(A,B)和addEdge(B,A)两条语句。

      1. 设计/实现FriendshipGraph类
  1. 定义一个列表peopleList用来保存人的实例;

  1. 定义一个HashSet类,用于测试人的列表中是否有重复姓名的出现;

  1. 编写addVertex函数用来添加成员,即添加person实例;

  1. 编写addEdge函数用来添加成员之间的关系,addEdge(A,B)表示A->B有关系;

  1. 编写getDistance函数用来计算两个成员之间的最短距离,且距离只能沿有向边计算,定义边界情况getDistance(A,B),若A==B则return 0,若A与B之间无可以到达的有向边,则return -1;

      1. 设计/实现Person类
  1. 定义私人String类型name变量,保存实例的姓名;

  1. 定义列表friendList,用来保存实例的好友列表;

  1. 编写Person函数,用来建立实例;

  1. 编写addFriend函数,用来添加好友;

  1. 编写getname函数,用来调用person实例的姓名;

  1. 编写getList函数,用来调用person实例的friendList;

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

由实验手册可得:

结果为:

与预期结果一致。

      1. 设计/实现测试用例
  1. 编写testaddVertex函数,测试addVertex函数;

  1. 编写testaddEdge函数,测试addEdge函数;

  1. 编写testgetDistance函数,测试getDistance函数;

图的结构为:

测试结果为:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值