Lab1 report
程序员文章站
2022-03-10 14:52:32
...
仅保留了参考价值比较大的部分实验内容。
文章目录
1 实验目标概述
2 实验环境配置
3 实验过程
3.1Magic Squares
n阶幻方是n×n数在方格中的排列,通常是独立的,使得所有行中的n个数、所有列的n个数以及两个对角线都等于同一个常数。
3.1.1 isLegalMagicSquare()
实验任务:判断给定文件内容是否为幻方。
实验思路:
文件的读入和切割处理
- · 以字符串形式按行读入测试文件,文件采用相对路径; · 用.append(s+"\n")方法还原文件总格式;
- 调用String.split(),对按”\n”分割,存到Map[][]二维数组作为它的每一行; ·
- 再针对每一行调用String.split(),对按”\t”分割,存到Map[][]二维数组作为它相应行的列元素,此时如果不是/t分割提示不满足分割规则;
//注:对于文件的读写和切割总结了一篇blog:https://blog.csdn.net/CynthiaLLL/article/details/104849571
至此字符串型二维矩阵准备完毕,下面是其他条件判断
- · 方阵的判断:根据java中矩阵的存储方式,可以判断矩阵的行数Map.length和列数Map[i].length是否相等
- 正整数的判断:调用Integer.parseInt()方法将矩阵转化为int内容方阵,并以此判断其中是否有非正整数元素
- 设置int数组分别存放每一行、列及对角线和; 先在行、列、对角线内部比较,判断是否相等; 再将行、列、对角线相互比较,判断是否相等。
至此MagicSquare的判断完毕
以上任何条件不满足都直接以false返回,当条件全部满足时返回true。
3.1.2 generateMagicSquare()
- 奇数矩阵时依次填入1到n^2,第一个填在第一行正中间,依次向上和向右移动一位,顺序填写,第一行向上会到最后一行,最右向右会到最左,每填n个数,下一个数填在该数下面。
- 对于违法输入,可以采取if条件判断,也可以用try-catch检测异常。
3.2 Turtle Graphics
3.2.4 Problem 6: Calculating Bearings
3.2.4.1 public static double calculateBearingToPoint
计算当前向量转过多少度后达到目标向量。其中当前向量由当前点、当前方向决定,目标方向由当前点、目标点决定,当前方向由当前方向与y轴正方向的夹角表示,目标向量的方向由当前点与目标点的连线与y轴正方向的夹角表示。
- 求当前点与目标点的连线与y轴夹角的正切值,tan=(targetX-currentX)/(targetY-currentY);
- 调用Math库中的atan2将其转化为角度,即为当前向量与y轴正方向的夹角;
- 减去currentBearing(当前方向),得解。
//作差的结果为负数时需要+360转化为正角。
3.2.4.2 public static List calculateBearings
对相邻两个点调用3.2.4.(1)的函数求夹角,保存在列表中,返回该列表。
3.2.5 Problem 7: Convex Hulls
凸包问题,给出一组点的坐标,求最少的点的集合,使其他所有点都在这些点围成的闭合凸多边形内。
使用gift-wrapping算法:
- 扫描list列表,找最左下点作为基点,并加入凸包集合中;
- 调用夹角计算的函数,找顺时针夹角最小的中继点,加入凸包集合;
- 再找后继点B,加入凸包集合;
- 将中继点设为起点、后继点设为中继点,依次循环查找直到新找到的点与初始基点。
//每次查找范围为凸包集合以外的点;
//多点平行于y轴时,若要取这个向量,注意中间点忽略的情况判断。
3.3 Social Network
3.3.1设计/实现FriendshipGraph类
- private List namelist = new ArrayList<>();
- public boolean addVertex(Person person) //插入结点,注意可能存在的重名情况
- public boolean addEdge(Person p1, Person p2)//连接p1->p2,注意判断p1、p2的存在性及可能存在的重复连接情况
- public int getDistance(Person p1, Person p2)//获取p1到p2的最短路径,注意判断p1和p2的存在性
BFS算法
3.3.2 设计/实现Person类
String name;//名字
List<Person> friends=new ArrayList<Person>();//朋友关系列表
boolean visited=false;//用于BFS计算最短路径的标记
public Person(String name) {
this.name=name;
}
public void add_friend(Person new_friend) //在朋友关系列表中添加一个新朋友
public List<Person> get_friends()//返回当前结点的friends属性
3.3.4 设计/实现测试用例
- 加点
- 重复加点
- 建立关系
- 单人不存在时建立关系
- 双人不存在时建立关系
- 重复建立关系
- 测试最小距离
- 常规最小距离
- 单人不存在时的最小距离
- 双人不存在时的最小距离
下一篇: 软件构造踩坑记录——测试
推荐阅读
-
MIT-6.828 Lab1实验报告
-
PHP实现自动登入google play下载app report的方法
-
fabric Report API
-
c# ClosedXML.Report excel报表排坑
-
【操作系统作业—lab1】linux shell脚本 遍历目标文件夹和所有文件 | 包括特殊字符文件名的处理
-
PLS-00306:调用'LS_JJN_REPORT'时参数个数或类型错误及解决办法
-
Winform将FastReport的report与PreviewControl建立绑定关系
-
机器学习classification_report方法及precision精确率和recall召回率 说明
-
Oracle百分比分析函数RATIO_TO_REPORT() OVER()实例详解
-
Winform中在FastReport的PreviewControl预览控件中对report控件模板中控件值进行修改