软件构造Lab1-Social Net

继续接着之前的博客,来分享一下Lab1剩余的部分,也就是Social Net。
这个可以说是最简单的了,我们要做的就是完成一个图的数据结构,并实现相应的方法即可。
下面分享一下我的数据结构:
按照实验已经给出的,我们要实现的java文件为FriendshipGraph.java
那么主类就是FriendshipGraph,Person和Relation是辅助FriendshipGraph实现的两个类。分别对应图结构中的顶点和边。由于是人际关系(这里指友谊)网。
软件构造Lab1-Social Net
通过实验给出的代码部分:
软件构造Lab1-Social Net
可以分析出来各个类中主要要实现的方法有这些:
Person: get()和set()方法。(这里用了一点C++概念);name属性
Relation:构造方法;起点和终点属性。
FriendshipGraph:
图的基本属性:边集/顶点集(取决于你自己);顶点总数,边总数。
addVertex()方法;addEdge()方法;getDistance()方法。
简单(反复)分析一下:这些都不难。getDistance用什么方法看需求了,我用了BFS。刚开始想写一下Dijkstra,前几天刚写了一个Matlab版本的,想用java试一下,可转念一想,发现没必要啊,就求的两点的路径而已…

分享一下类内部结构,还有用到的库:
软件构造Lab1-Social Net
后面三个是自动添加的。
软件构造Lab1-Social Net
Person类
软件构造Lab1-Social Net
因为实验中有提到要支持有向图,我从此出发添加了相关方法和属性。
软件构造Lab1-Social Net
存储结构我用了邻接表,毕竟java可以实现动态二维数组。然后还添加了一个图类型的属性,区分生成的图是有向图还是无向图。并且写了相关的构造方法,当然无向图和有向图都有是否有权重这个特征,在相关方法 中也做了处理。
软件构造Lab1-Social Net
下面是一些测试情况:
①:实验给出的必须通过:
软件构造Lab1-Social Net
会有一些添加点和边以及相关的稳健性检查信息提示。
软件构造Lab1-Social Net
②:然后是有向图的例子软件构造Lab1-Social Net
这是自己建立的:按照上一节课程内容,测试用例覆盖所有等价类即可。

软件构造Lab1-Social Net

另外在我的设计中,目前还剩余一个有向图求两点WPL的方法没有写完,暂定使用Dijkstra算法。
写法可能会同之前发的博客:Dijkstra和Floyd算法的Matlab版本
另外在这里记录一下Java中INF、-INF等的使用:
定义在Double和Float当中
INF:Double.POSITIVE_INFINITY
-INF: Double.NEGATIVE_INFINITY
NaN:Double.NaN
Dijkstra中可能用到


记录一个问题:
对象最好使用equals方法比较是否相等,用 ==号可能会有问题。