Lab_2实验总结(软件构造)

1.1 Poetic Walks

用两种方法实现Graph类用来存储加权有向图,并使用Graph类来在输入的每个单词之间从语料库中找出权重为2的单词插入实现诗意漫步。

1.1.1 Get the code and prepare Git repository

直接从GitHub下载zip格式的任务代码,用GitHub的本地应用创建并管理本地开发

1.1.3 Problem 2: Implement Graph

1.1.3.1 Implement ConcreteEdgesGraph

Vertices用于保存所有的顶点,而类Edgefromtoweight来表示一个有向边的起点、终点与权重,edges是类EdgeList,用来保存所有边。由此来完成了所有的功能。

1.1.3.2 Implement ConcreteVerticesGraph

Vertexv来表示顶点名称,edge是一个Map,用来保存由v的所有边与权重。Vertices便是VertexList,这样就能构成一个有向图,由此完成所有功能。

1.1.4 Problem 3: Implement generic Graph

1.1.4.1 Make the implementations generic

ConcreteVerticesGraphConcreteEdgeGraph后加入来使用泛型,并将每个涉及的String变量全部改为L,包括在VertexEdge类里的所有String类型变量和Map里的String全部改为L即可。

1.1.4.2 Implement Graph.empty()

我选用ConcreteVerticesGraph作为我的Graph的具体实现。

1.1.5 Problem 4: Poetic walks

1.1.5.1 Test GraphPoet

 

1.1.5.2 Implement GraphPoet

先从corpus文件里读入所有单词,并构建加权有向图。

接着在方法poem里读入控制台输入input,并通过‘ ’分离每个单词读入到数组中(在这里我将所有单词全部变成小写)。然后将输入的每个单词与语料库中的每个单词进行比对,如果这个单词与输入的相邻的俩个单词距离都为一,就将其插入到结果中,等待遍历完以后一并输出。

1.1.5.3 Graph poetry slam

语料库如下

 

输入如下

 

输出如下

 

1.2 Re-implement the Social Network in Lab1

要复用已经写好的类在这个任务的实现中,我选择使用的FriendshipGraph类是继承ConcreteVerticesGraph类实现的。在确定复用代码之后,其主要的问题就是如何合理的使用已有的类。比如在搜集两个人的最短距离的时候,我用已有的Graph接口中给出的targets函数来寻找邻接的节点。这样就可以在尽量多的使用已有代码和尽可能不改变已有的Main客户端的要求下实现P2。

1.2.1 FriendshipGraph类

直接从ConcreteVerticesGraph继承的类。

addVertex方法是从Person类中提取名称,然后再调用add()方法将点加入。

addEdge方法即从Person类中提取名称,然后再调用set()方法将边加入。

getDistance方法中每条边的长度都是单位长度,直接使用BFS算法即可解决。

 

1.2.2 Person类

Person类用于描述每个成员的姓名,方法主要就是从此类中获取String类型的姓名,由此创建了getName()方法。

1.2.3 客户端main()

沿用了第一次试验的main()。

1.2.4 测试用例

尝试编了一些用例。

Lab_2实验总结(软件构造)_第1张图片

1.2.5 提交至Git仓库

如何通过Git提交当前版本到GitHub上你的Lab2仓库。

项目的目录结构树状示意图。

Lab_2实验总结(软件构造)_第2张图片

你可能感兴趣的:(Lab_2实验总结(软件构造))