结对作业——WordCount进阶版
1.
博客作业地址:https://www.cnblogs.com/piraat/p/9754497.html
码云地址:https://gitee.com/piraat/PairProject-C/tree/master
2.
学号:201621123053
同伴博客地址:http://www.cnblogs.com/ACmilan1899kaka/p/9756046.html
码云地址:https://gitee.com/milan_kaka/PairProject-Java
3.psp表格
PSP2.1 | 个人开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 19 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 10 | 19 |
Development | 开发 | 320 | 251 |
· Analysis | 需求分析 (包括学习新技术) | 20 | 10 |
· Design Spec | 生成设计文档 | 10 | 5 |
· Design Review | 设计复审 | 10 | 6 |
· Coding Standard | 代码规范 | 10 | 5 |
· Design | 具体设计 | 60 | 19 |
· Coding | 具体编码 | 100 | 72 |
· Code Review | 代码复审 | 10 | 12 |
· Test | 测试(自我测试,修改代码,提交修改) | 100 | 112 |
Reporting | 报告 | 35 | 32 |
· | 测试报告 | 10 | 20 |
· | 计算工作量 | 10 | 6 |
· | 并提出过程改进计划 | 15 | 6 |
4.解题思路描述
此次实验增加了几个新功能,并加入了GUI,我主要负责的是新功能的模块。因为上次实验中的代码耦合性不算高,所以此次主要内容在于解决按照要求的词组进行排序。一开始我想运用正则表达式进行匹配:以\b[a-zA-Z]{4,}[A-Za-z0-9]为基础,要求多少个词组就在后面跟上多少个[^0-9a-zA-Z]+[a-zA-Z]{4,}[A-Za-z0-9]。然而,我在尝试以后才发现,这样匹配一个单词只能出现在一个词组中,无法达到要求中的词组匹配。所以,因为正则表达式学的不到位,无法写出符合要求的正则表达式。我选择运用笨办法,就是先将所有输入的单词整理进arraylist,然后再将他们按照要求分类放入map中 `String[] phraseTmp = new String[phraseNum];` 这样虽然效率低,但总算保证符合要求。
新功能作为一个新函数,重载了上一次写的函数,加入了新的 `int phraseNum` `参数。不足的点在于,因为一开始我希望直接运用正则表达式进行匹配,所以没有想要将整理单词列表作为一个单独的函数提出来。这也就造成了两个方法都需要分别进行单词的提出,自然而然的降低了效率。
5.代码组织与单元测试
单元测试相对上一次来说改动不大,主要是增加了对词组的测试
PS.图形界面在同伴上的基础上增加了一些功能
6.代码说明
我负责的值得说明的代码部分主要是词组部分。我运用的是笨办法,首先创建与词组要求的词汇数量相同的字符串数组,这样可以保证保存下所有词组不会有遗漏。
先用for循环将前几个词分别保存在相应的字符串中,一直循环到第一个字符串词数量达到要求。然后将第一个字符串存入map中
然后,每遇到一个词都将其存在所有字符串中,每当一个字符串满就将其与map中存入的词组比对,如果不同则加入,相同则value加一。
图形界面我并没有写太多,主要是添加了由单选框控制的文本输入phraseN.setEditable(phraseNumB.isSelected());
与文件选择的JFileChooser chooser = new JFileChooser();
7.效率分析
因为我没有运用stringbuilder,而是对字符串直接"+",所以可能拖慢了速度。
8.实践经历与感受
个人感受:
- 复用的问题:我在上面关于复用所提到的,关于单词的问题是其一。另外一个关于复用的问题是上次用控制台进行操作时,我并没有输出模块与Main函数分离开,这就导致这次输出需要用到swing时需要将所有的system.out全部改掉。如果说前面一个是编程技术问题,那么这一个问题就是编程习惯问题。我记得曾经JAVA老师在教接口时就以输出举的例子,我应该尤其注意这一点
结对编程经历
此次关于结对编程的实践经历既有我们自认为做的不错的地方,也有需要改进的地方。
-
我们的优点在于分清楚了两个人都需要做什么,所以在做的时候并没有感觉不习惯,也没有因为自己的编程问题给对方带来麻烦。
-
需要改进的地方则是我们没有将函数名称等问题统一,这给我们后续进行编程带来了一定的麻烦。我们应该尽早确定下一些标准,例如两个人共同商定着写一些接口文件,确定参数的共同名称等等。在接下来的团队编程中这是我尤其要注意的地方。