1. 实验要求

练习结对编程,体验敏捷开发中的两人合作。

开发一个Java命令行程序,实现从文本文件中读取数据并根据要求生成图结构,输出该图结构,并在其上进行一系列计算操作,实时展示各操作的结果。

  1. 待求解问题描述与数学模型

1.文本的读入以及有向图的生成

输入数据为文本文件,文本文件包含用英文书写的文本数据,将一切标点符号,回车

符以及换行符默认为空格,忽略一切非字母的字符。有向图的节点为文本中包含的单

词(不区分大小写),两个单词相邻即存在一条有向边(相邻是在进行处理以后的相

邻关系),边的权重是指该边在文中出现的次数。

2.展示有向图

可视化展示生成的有向图。

3.查询桥接词

用户输入两个英文单词,当图中存在word1->word3->word2的路时,word3即为word1

与word2的桥接词,程序可以给出当输入单词不存在于图中的错误提示。

4.根据桥接词生成新文本

用户输入一段新文本,对于文本的处理方式与1中相同,在建立好的有向图中查找新文本中每两个相邻单词中间的桥接词,如果存在的话将其插入,不存在则跳过,按照这种规则生成新的文本,新的文本除了加入的桥接词以外不可以有其他的变化。

5.计算两个单词之间的最短路径

用户输入两个单词,给出两个单词之间的最短路径

6.随机游走

从图中随机一个节点随机的对图进行遍历知道没有边为止,用户可以随时停止遍历

  1. 算法与数据结构设计
  1. 3.1.设计思路与算法流程图

根据文本生成图:将文本读入成字符串,将字符串中的除了英文字母以外的其他字符全部替换成空格,并将所有字母全部变成小写,再将由于替换产生的长空格用一个空格替换,

将此时的字符串用空格分隔成数组words,再将其中重复的单词删除掉得到真正的节点数组dots,通过遍历words数组判断单词是否相邻,采用邻接矩阵来存储有向图

展示图:遍历每一个节点,输出以其为头的边

查询桥接词:首先查询输入的词是否都在图中,若不在给出相应的错误提示,如果都存在于图中则遍历图中的每一个节点来判断是否符合桥接词的定义,将所有桥接词以逗号连接形成字符串作为函数返回值,在主函数中进行输出格式的处理

根据桥接词生成新文本:将用户输入的文本按照在生成图的过程中生成words数组的方法生成存有输入文本的words数组,遍历该数组,调用查询桥接词的函数判断相邻单词之间的桥接词,若不存在桥接词将用户输入文本的这部分内容输出,若存在则先输出第一个单词的部分再输出桥接词最后输出第二个单词的部分(因为已经对于用户输入的文本进行了改变,因此在输出的过程中应该找到单词对应的原字符串中相应部分进行输出。

计算最短路径:利用Floyd算法,通过邻接矩阵记录每两个相邻单词之间的边的权值,没有边的权值置为MAX。如果A[i][k]+A[k][j]<A[i][j]就把A[i][j]更新成新的更短的路径长度,并用P[i][j]记录更新的路径经过的点k。最后在单词数组里匹配用户输入的起点和终点,在二维数组A中查找最短路径,循环遍历A[start][k],最后将得到的路径上的点k倒序输出。

随机游走:通过随机产生游走的第一个节点,在此后的游走过程中在每进行下一步游走之前都通过用户输入的是否进行游走的信号来判断是否继续,每一步的游走都通过随机产生,直到停止或者用户要求停止为止

  1. 3.2.数据结构设计

图G采用邻接矩阵的方式进行存储,其中包括

存储节点的数组,存储权值的数组,以及点的个数和边的个数

  1. 实验与测试

设计1个至少包含50个单词的输入文本文件,使之可覆盖本题目中关于输入文件和功能的各种特殊情况,作为你开发的程序的输入。

针对在有向图上操作的每项功能,为其设计各种可能的输入数据。输入数据的数量不限,以测试程序的充分性为评判标准(下面各节中的表格的行数请自行扩展)。

记录程序的输出结果,判断输出结果是否与期望一致,并记录程序运行截图。

  1. 4.1.读取文本文件并展示有向图

文本文件中包含的内容:

Over the past three decades, Chinese economy is booming. The world is watching China and many foreigners have realized the importance of seeking cooperation, so they want to do business with Chinese people and learning our language works better. Confucius institute provides the place to learn mandarin.As the world is crazy about Chinese, more and more foreigners have interest in our language and culture.

期望生成的图(手工计算得到):

over -> the: 1; 
the -> past: 1; 
the -> world: 2; 
the -> importance: 1; 
the -> place: 1; 
past -> three: 1; 
three -> decades: 1; 
decades -> chinese: 1; 
chinese -> economy: 1; 
chinese -> people: 1; 
chinese -> more: 1; 
economy -> is: 1; 
is -> booming: 1; 
is -> watching: 1; 
is -> crazy: 1; 
booming -> the: 1; 
world -> is: 2; 
watching -> china: 1; 
china -> and: 1; 
and -> many: 1; 
and -> learning: 1; 
and -> more: 1; 
and -> culture: 1; 
many -> foreigners: 1; 
foreigners -> have: 2; 
have -> realized: 1; 
have -> interest: 1; 
realized -> the: 1; 
importance -> of: 1; 
of -> seeking: 1; 
seeking -> cooperation: 1; 
cooperation -> so: 1; 
so -> they: 1; 
they -> want: 1; 
want -> to: 1; 
to -> do: 1; 
to -> learn: 1; 
do -> business: 1; 
business -> with: 1; 
with -> chinese: 1; 
people -> and: 1; 
learning -> our: 1; 
our -> language: 2; 
language -> and: 1; 
language -> works: 1; 
works -> better: 1; 
better -> confucius: 1; 
confucius -> institute: 1; 
institute -> provides: 1; 
provides -> the: 1; 
place -> to: 1; 
learn -> mandarin: 1; 
mandarin -> as: 1; 
as -> the: 1; 
crazy -> about: 1; 
about -> chinese: 1; 
more -> and: 1; 
more -> foreigners: 1; 
interest -> in: 1; 
in -> our: 1;

程序实际生成的图:

over -> the: 1; 
the -> past: 1; 
the -> world: 2; 
the -> importance: 1; 
the -> place: 1; 
past -> three: 1; 
three -> decades: 1; 
decades -> chinese: 1; 
chinese -> economy: 1; 
chinese -> people: 1; 
chinese -> more: 1; 
economy -> is: 1; 
is -> booming: 1; 
is -> watching: 1; 
is -> crazy: 1; 
booming -> the: 1; 
world -> is: 2; 
watching -> china: 1; 
china -> and: 1; 
and -> many: 1; 
and -> learning: 1; 
and -> more: 1; 
and -> culture: 1; 
many -> foreigners: 1; 
foreigners -> have: 2; 
have -> realized: 1; 
have -> interest: 1; 
realized -> the: 1; 
importance -> of: 1; 
of -> seeking: 1; 
seeking -> cooperation: 1; 
cooperation -> so: 1; 
so -> they: 1; 
they -> want: 1; 
want -> to: 1; 
to -> do: 1; 
to -> learn: 1; 
do -> business: 1; 
business -> with: 1; 
with -> chinese: 1; 
people -> and: 1; 
learning -> our: 1; 
our -> language: 2; 
language -> and: 1; 
language -> works: 1; 
works -> better: 1; 
better -> confucius: 1; 
confucius -> institute: 1; 
institute -> provides: 1; 
provides -> the: 1; 
place -> to: 1; 
learn -> mandarin: 1; 
mandarin -> as: 1; 
as -> the: 1; 
crazy -> about: 1; 
about -> chinese: 1; 
more -> and: 1; 
more -> foreigners: 1; 
interest -> in: 1; 
in -> our: 1;

二者是否一致:

一致

给出实际运行得到结果的界面截图。

  1. 查询桥接词

序号

输入(2个单词)

期望输出

实际输出

运行是否正确

1

fantastic is

No fantastic in the graph!

No fantastic in the graph!

正确

2

fantastic baby

No fantastic and baby in the graph!

No fantastic and baby in the graph!

正确

3

is crazy

No bridge words from “is” to “crazy”!

No bridge words from “is” to “crazy”!

正确

4

chinese and

The bridge words from chinese to and are:people,and more.

The bridge words from chinese to and are:people,and more.

正确

给出实际运行得到结果的界面截图。

1.

2.

3.

4.

  1. 根据桥接词生成新文本

序号

输入(一行文本)

期望输出

实际输出

运行是否正确

1

Chinese@ fantastic!

Chinese@ fantastic!

Chinese@ fantastic!

正确

2

Chinese@ and English@!

Chinese@ more and English@!

Chinese@ more and English@!

正确

3

Chinese@@ and@ English are friends!

Chinese@@ more and@ English are friends!

Chinese@@ more and@ English are friends!

正确

给出实际运行得到结果的界面截图。

  1. 计算最短路径

序号

输入(两个单词、或一个单词)

期望输出

实际输出

运行是否正确

1

world chinese

world->is->crazy->about->chinese

world->is->crazy->about->chinese

正确

2

and our

and->learning->our

and->learning->our

正确

给出实际运行得到结果的界面截图。

  1. 随机游走

该功能无输入,让你的程序执行多次,分别记录结果。

给出实际运行得到结果的界面截图。

  1. 编程语言与开发环境

Java DK 8.0

Eclipse IDE Oxygen Release (4.7.0)

  1. 结对编程
  1. 6.1.分组依据

李孟阳同学十分严谨,敲代码注重优雅与美感,刘烁同学性子比较急,什么都直接尝试,想到什么就敲什么,所以两个人十分互补,但最主要的原因还是,我们是室友,我俩不组队就显得不太合适。

  1. 6.2.角色切换与任务分工

日期

时间( HH:MM -- HH:MM)

“驾驶员”

“领航员”

本段时间的任务

9.12

13: 45-15: 30

刘烁

李孟阳

文本输入及字符串处理

9.13

19:00-21:00

李孟阳

刘烁

构建邻接矩阵

9.13

21:00-22:00

刘烁

李孟阳

完善有向图

9.14

18:00-21:00

李孟阳

刘烁

查找桥接词,将桥接词随机插入文本

9.14

21:00-23:00

刘烁

李孟阳

Debug,测试这部分功能

9.16

9:00-11:00

李孟阳

刘烁

处理大小写及非法符号

9.16

20:00-22:00

刘烁

李孟阳

计算最短路径

9.17

8:00-11:00

李孟阳

刘烁

实现随机游走

9.17

12:00-15:00

刘烁

李孟阳

有向图遍历可视化输出

9.17

15:00-16:00

李孟阳

刘烁

完善主体函数及GUI,实现功能的可选择性。

  1. 工作照片

  1. 工作日志

由领航员负责记录,记录结对编程期间的遇到的问题、两人如何通过交流合作解决每个问题的。可增加表格的行。

日期/时间

问题描述

最终解决方法

两人如何通过交流找到解决方法

9.12

将其他字符替换成空格后再按空格split就会在单词数组里出现空格

在处理字符串时将多个空格置换成一个空格

先交流问题,想出解决方案,上网查找java中的字符串函数

9.14

插入桥接词时,如果处理原文本,就会导致原文本大小写无法按原样输出,还有各种特殊符号。

没有改变原字符串,选用了ignorecase的方法排除大小写状况进行和原字符串的匹配和插入

欸,就想呗,硬想,一点点从数组想。

9.16

头和尾中间遍历出来最短路径上的单词是倒序输出的

用数组暂存然后倒过来输出

这个还挺简单的。

9.17

输入文本的时候发现很多特殊情况没有被考虑到

一点点改插入桥接词的函数,保证头和尾的flag处在正确的位置,确保一切非法输入的正常输出,增强程序鲁棒性。

小蜘蛛,debug,两个人一起慢慢看。

  1. 小结

对本次实验过程和结果的思考,包括但不限于对以下问题的思考:

  • 与两人分别编程相比,是否体验到编程效率的提高、编程质量的提高?

因为不敲代码的人头脑清醒,所以编程质量得到了很大的提高,很明显bug少了很多,在bug刚出现的时候就会被指出而不用等到后期测试。

而因为两个人都有各自的事务所以可以一起敲代码的时间不像自己一个人敲代码那么灵活,所以会下意识抓紧时间,编程效率显著提高。

  • 你认为结对编程的优势在哪里、有什么不适应之处?

优势就在于两个头脑比一个人的要清醒很多,没什么不适应之处。

  • 你认为为何在敏捷开发中倡导结对编程?

因为这样可以显著提高编程效率,有效减少用户等待时间,可以更好的给用户反馈并显著提高编程质量。

  • 未来的软件开发任务中,你是否愿意使用结对编程?

愿意愿意,十分愿意。

Lab 1:结对编程相关推荐

  1. 结对编程——单元测试

    结对编程 结对人:宫成荣 代码如下: #include<stack>                #include<iostream> #include<deque&g ...

  2. 软件工程网络15结对编程作业

    软件工程网络15结对编程作业 1.项目成员 学号:201521123014 博客地址:http://www.cnblogs.com/huangsh/ 学号: 201521123102 博客地址:htt ...

  3. 结对编程-马尔科夫链作业成绩

    结对编程-马尔科夫链作业成绩 作业博客:http://www.cnblogs.com/vertextao/p/6881960.html 问题 本次作业仅有三位同学按时提交,两位同学延迟提交,出人意料, ...

  4. 和AI结对编程!OpenAI与GitHub联手推出AI代码生成工具,比GPT-3更强大

    作者 | 琰琰.青暮 比GPT-3更强大! 昨日,微软与OpenAI共同推出了一款AI编程工具GitHub Copilot,这款工具基于GitHub及其他网站的源代码,可根据上文提示为程序员自动编写下 ...

  5. 结对编程--------四则运算 实验总结2

    结对编程----------四则运算 实验总结2 结对对象 20172301 郭恺 20172328 李馨雨 过程截图 这个是我们编写的main,叫ArithmeticTest1主要用于生成随机等级的 ...

  6. 结对编程-Core 第12组 [pb15061359+pb15061351]

    一.项目要求 1.输入题目数量,生成操作数为3~5个的四则运算题目 2.输入上限值控制生成的操作数的最大值以及结果的最大值 3.输入支持的操作符类型:加.减.乘.除.乘方.括号 4.输入支持的操作数类 ...

  7. 20165330 结对编程项目-四则运算 第一周

    需求分析 实现一个命令行程序,要求:自动生成小学四则运算题目(加.减.乘.除) 可实现多个运算符一起运算 可以真分数形式输出结果 测试结果的正确性 统计题目完成数并计算正确率 设计思路 实验首先是完成 ...

  8. 第四次作业 结对编程-黄金点游戏

    本次配对实验中,我的队员是王新亮同学,他的博客是http://www.cnblogs.com/wangxinliang/ 组员介绍: 我的结对成员是王新亮同学,他性格踏实稳重,认真勤恳,脾气非常温和. ...

  9. 现代软件工程 结对编程 (I) 三维棋类游戏

    Pair Project I 3D Board Game Turn a usual 2D board game into 3D by transferring  board and game rule ...

最新文章

  1. Adaptive Execution让Spark SQL更高效更好用
  2. [note]浏览器兼容性(embed标签、字体兼容相关
  3. WINCE的FFMPEG交叉编译环境搭建
  4. 【Java萌新】MyBatis-Plus案例
  5. QT+VS中使用qDebbug()打印调试信息无法显示
  6. Codeforces Round #607 (Div. 2) E. Jeremy Bearimy dfs + 思维
  7. .net知识和学习方法系列(二十五) .net中的windows service与服务操作
  8. 索引大小对语句执行速度的影响
  9. 用IDM快速下载百度云文件
  10. 用户心中十大最具影响力国产软件评选揭晓
  11. 常识推理问答相关最新研究进展
  12. android格式化通讯录
  13. 汉字GB2312编码
  14. WIN10教育版激活方法
  15. 显示如何用最少的20美元来付款
  16. 人工智能对话系统在VUI和GUI结合下对于控件调用的调研报告
  17. 极智Coding | C 和 C++ 读存 bin 文件方法
  18. 固态盘到底该怎么做Raid?
  19. 上台紧张的原因有哪些
  20. 为什么需要一亩三分地?

热门文章

  1. Indian Food Recipes Dataset(印度食品配方数据集)
  2. 2021首届-西部云安全峰会来了!9月26日西安见
  3. cxzday8-字符串作业
  4. IE与FireFox下扩展开发插件收集zz
  5. 前端js和css的压缩合并之wro4j
  6. 酒店管理系统功能结构图
  7. CANoe 11.xx 快速入门教学
  8. [散文]芒果女人(作者:毕淑敏)
  9. Visual Studio 2019 和 qt 5.15.1 下 opengl 的运用 - Lighting - 01 - Colors
  10. 逻辑输出光电耦合器   TLP350