首页 > 技术文章 > 结对编程作业

hot-heart-people 2019-11-05 16:53 原文

一、任务:

实现一个能处理正确输入的命令行的计算地铁线路最短路径的程序。

任务需求:

1.对于地铁线路信息图,我们约定它采用参数 -map 作为标志。程序启动时需要通过读取 -map 参数来获得对应的自定义地铁文件(命名为 subway.txt),从而得到地铁线路图的信息。

`java subway -map subway.txt`

 

2.用户希望查询指定地铁线经过的站点。这样,在应用程序需要支持一个新的命令行参数 -a,它指定了用户希望查询的地铁线路。

`java subway -a 1号线 -map subway.txt -o station.txt`

 

3.用户希望坐地铁,他希望能通过最少的站数从出发点到达目的地,在命令行中以 -b 参数加两个地铁站点名称分别作为出发与目的。

`subway.exe -b 洪湖里 复兴路 -map subway.txt -o routine.txt`

二、PSP

PSP 2.1Personal Software Process StagesTime
Planning 计划  
  · Estimate   · 估计这个任务需要多少时间  3weeks
Development 开发  
  · Analysis   · 需求分析 (包括学习新技术) 1day
  · Design Spec   · 生成设计文档 2days 
  · Design Review   · 设计复审 (和同事审核设计文档) 1day 
  · Coding Standard   · 代码规范 (为目前的开发制定合适的规范) 1day
  · Design   · 具体设计 2days
  · Coding   · 具体编码 3days 
  · Code Review   · 代码复审 2days 
  · Test   · 测试(自我测试,修改代码,提交修改) 1day
Reporting 报告  
  · Test Report   · 测试报告 1day
  · Size Measurement   · 计算工作量 1day
  · Postmortem & Process Improvement Plan   · 事后总结, 并提出过程改进计划 2days 
  合计 17days

三、模块接口的设计与实现过程

1、源数据:

 

 

 第一个数据6,表示一共有6条线路。紧着这一个空行,然后是1号线,共23个站,接着以刘园为起点站,距离下一个站的距离的为1,以此类推,直到终点站,距离下一个站标为-1,其他线路以此类推。

 2、代码思想与设计

思想:将各个地铁路线的站台看为结点,通过边相连接,建立有向图,最后使用迪杰斯特拉算法算出站台之间的最短路径即可。

设计:

总共2个类:分别为Station类表示站台,Edge类表示站台与站台之间的边。

Station{

String stationame;  // 站台名

boolean visited;  // 用于迪杰斯特拉算法,判断是否标记

int dist;  // 用于迪杰斯特拉算法,表示已知的从起点到达它的最短路径长度

Station path;  // 记录迪杰斯特拉算法中,它前面路线的站台

String trackname;  // 所处的地铁线

}

 

Edge{

Station station;  // 通过这条边引出的节点(站台)

String lineName;  // 所处线路名

int distance;  // 这条边的权重(俩站台间的距离)

}

总共5个函数(除开主函数):

第一个函数为fileReader(),用于读取文本文件,通过二维数组存储每条地铁线路的所有站台,以及当前站台前后俩站台的边。

第二个函数为ShowStation(),根据用户所给的地铁线,输出对应的该条线路的所有的站台。

第三个函数为dijksraTravel(),参数为用户输入的起点,通过起点计算它到各个站点的最短距离。

第四、五个函数(参数不一样)为shortestPath(),通过递归的方式,从起点开始,逐个记录所经过的线路,最终到达终点,存储俩站台之间的最短路径。

 

未能实现部分:

 

由于技术有限,未能通过命令行启动程序,并读取不同的命令对应的命令行参数。

这里我采用的是通过编译器里根据指定的指示,让用户输入,并返回且存储响应结果于对应文件中。

如图:

 

 

四、测试效果

1.读取subway.txt文件,转换为对应的图。

此函数,用于读入数据。

 

2.通过-a,指定用户希望查询的地铁线路。

 

 且存储在station文件中:

 

 

3.通过-b参数加上两个地铁站点名称,求俩站点之间的最短路线:

并存储结果至routine.txt文件中。

 

 

五、收获

通过本次结对编程,感受到了事半功倍的工作效果。同时通过本次项目,熟悉了java语言,以及通过idea进行编程的熟练程度。理解了最短路径算法的思想。

一开始,如果设计地铁线路就是一个难点,既要好读取,又能准备表达其中含义。以及以何种方式来保存这个地铁线路。最后通过的是二维数组进行保存每条线路。然后通过Map以站台为key,以它所引出的俩条边存储在ArrayList,该ArrayList作为values。

六、作业提交

github地址:https://github.com/Shanks07/homework

推荐阅读