HIT软件构造Lab1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这次是我对软件构造实验一的一些想法和体会,建议使用IDEA+JDK11去做


提示:以下是本篇文章正文内容,下面案例可供参考

一、Git的使用

1.首先下载安装git(可以在本地用它向github进行数据或者文件的传输)
2.使用git clone + 地址 可以从老师给的网址上克隆从而完成本地的配置
3.写完之后可以使用git init=>git add . => git commit -m “…” =>git push origin master 完成递交
4.使用git或者github的时候需要自己找梯子,挂下VPN访问会好一点

二、实验的完成

P1:Magic Squares

幻方矩阵是一个特殊的矩阵,每行每列每个对角线上的元素相加的和都是一样的。该实验要求我们判断给出的文件是否是幻方矩阵并输出错误类型。而且要求我们自己利用给出的函数产生一个幻方矩阵输入到6.txt中,并再次判断一下。这个实验主要考察了我们对字符串和文件的读入、读出的相关操作。

  1. isLegalMagicSquare()
    在之后的读入中,我们肯定是一行行的读入,所以我们可以先计算出行数,时候在每一行的读入的结束时刻,统计该行字符串的长度(即列数),并与行数进行比较,即可完成“行数与列数是否相等的判断”,在遍历每个元素的时候我们去检查其中是否含有“-”和“.”以确保都是正整数,同时利用integer.valueof可以筛选是否有没用/t分割的,如果存在这种错误,则会抛出异常并返回false。
    排除完特殊情况,我们之后就可以检查每行,每列,每个对角线元素加和是否相等,这里我用了三个数组row[] column[] diagonal[]去存储加和的结果,并在第一层循环中加入了每行与每行、每列与每列之间是否相等的检查,我令第一行/列的和作为一个标准值,如果之后的行/列与其不相等,则不满足条件,返回false。对角线的话,之后左右两个,加完直接判断就好,之后再对这三个标准值检查两两之间是否相等即可。
  2. generateMagicSquare()
    首先判断n是否为奇数,如果n为负数或者偶数,返回false,并提示相关错误信息,之后利用已经理解并添加好注释的函数生成一个幻方矩阵,再加入写入此操作,把构造好的矩阵输入到6.txt,并利用之前的判断函数isLegalMagicSquare()判断一下

P2:Turtle Graphics

做到P2的时候需要去阅读国外大学的英文文档。
总的来说就是需要你去填补TurtleSoup中的函数,在其main函数中运行画图或者在TurtleSoupTest中运行测试。
做P2的时候需要把Package turtle 改成Package P2.turtle,并安装一下Junit
其中的函数的具体实现:
1.drawSquare():画正方形,用一个for循环即可
2.calculateRegularPolygonAngle():边转角,利用“正多边形角度=180-360/边数”即可
3.calculatePolygonSidesFromAngle():角转边,利用“边数=360/(180-内角度数)”即可,但需要注意下为了完成之后的测试,我们还需要调用一下Math中的ceil方法(返回最小的(最接近负无穷大) double值,该值大于或等于该参数,并等于某个整数。 )。
sides = (int) Math.ceil(360.0 / (180.0 - angle));
4.drawRegularPolygon():利用前面的函数和for循环就可以实现
5.calculateBearingToPoint():这个是个数学题OvO,我们在纸上画一下图就可以看出数学关系了。注意如果算出来的角度不规范超出了(0-360),需要转化一下
6.calculateBearings():一个点到一系列点,用迭代就可以
7.convexHull():这个是P2里面最难的一个,需要在网上查一些资料并理解,详细的可以直接在CSDN上查一下,在此不在赘述
8.drawPersonalArt():自由发挥

P3:Social Network

先贴一张翻译
贴一张翻译,大概快速的了解一下
此任务需要实现并测试一个FriendshipGraph类,该类表示社交网络中的友谊,并可以计算图中两个人之间的距离。还需要实现一个辅助类Person。虽然应该将社交网络建模为一个无向图,其中每个Person都与零个或多个Person相连接,但设计的graph实现应该是定向的。
个人认为可以调一下实验报告的顺序,先写Person再写FriendshipGraph。

  1. 设计/实现FriendshipGraph类
    先定义两个动态数组ArrayList去存放所有的名字(查重),和存放所有人。
    之后再设计添加人,添加关系,计算距离的方法即可
    在这里插入图片描述
    其中getDistance是本问中的重难点,要利用BFS算法,采取队列的数据结构
    其中main()中把老师给的测试代码复制上去就行了
    2.设计/实现Person类
    包含姓名和朋友的集合在这里插入图片描述

    3.编写测试
    这里需要我们用到Junit,写测试文件可以先写测试方法再在测试方法上面直接加上@Test,这时点一下IDEA直接就帮你搞好了。(IDEA yyds)


总结

这次实验写的比较紧,期间也查阅了大量的资料,求助了身边的两位非常热心的朋友(っ•̀ω•́)っlc、lky,在此向他们表示真挚的感谢!!!

猜你喜欢

转载自blog.csdn.net/m0_50906780/article/details/117196748