结对作业——WordCount进阶版
一、博客地址
冯一:https://www.cnblogs.com/fy201621123066/p/9751614.html
徐建民:https://www.cnblogs.com/happyzm/p/9626779.html
码云:https://gitee.com/WoShiLiangChaoWeiDeShiYou/wewordcount.git
(ps:很想问一个傻问题,为什么这个地址没办法直接点。。。刚开始都可以,现在就变了,真是个善变的东西,很难过,求解)
二、结对PSP表格
PSP2.1 | 个人开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 40 | 50 |
Development | 开发 | 300 | 600 |
· Analysis | 需求分析 (包括学习新技术) | 60 | 75 |
· Design Spec | 生成设计文档 | 70 | 100 |
· Design Review | 设计复审 | 30 | 40 |
· Coding Standard | 代码规范 | 30 | 35 |
· Design | 具体设计 | 60 | 80 |
· Coding | 具体编码 | 200 | 260 |
· Code Review | 代码复审 | 30 | 25 |
· Test | 测试(自我测试,修改代码,提交修改) | 0 | 0 |
Reporting | 报告 | 60 | 80 |
· | 测试报告 | 0 | 0 |
· | 计算工作量 | 20 | 35 |
· | 并提出过程改进计划 | 0 | 0 |
三、解题思路描写
1、编程语言
- Java
2、对于题目的理解与知识点的使用 - 题目中有提到增加了两个新的功能:
词组统计:能统计文件夹中指定长度的词组的词频
自定义输出:能输出用户指定的前n多的单词与其数量
词组统计用到了多重循环,对每一层进行一次判断,这样子统计得更准确一些;对于自定义输出这个东西有点难度,这次就只增加了词组统计这个功能;伙伴就是增加了界面。
3、开始设计和编码 - 先划分好类,要用哪些方法,都先设计好了再进行下一步
- 进行编码
4、遇到问题的解决方法 - 这一次有了同伴,遇到问题两个人进行了讨论,问题就没有很大,多一个人多一种想法;也让我感觉到了每个人都有自己擅长的部分,同伴还是很给力的,感激。
四、设计实现过程
- 划分的类
WordCount类:用来存放所统计字符数、单词数、词组统计等。
wordlist()方法
getWordcount()方法
这次就只增加了一个功能,就只把那个统计词组的方法添加进去了而已。 - GUI界面设计
使用netbeans进行了界面布局
五、代码说明
- wordlist()方法:将Map中统计的单词按出现的次数多少来进行排序,然后存储在list中。
public List wordlist(Map Wordcount) {
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(wordcount.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { // 对Map中内容进行排序,先按词频后按字典顺序
if (o1.getValue() == o2.getValue()) {
return o1.getKey().compareTo(o2.getKey());
}
return o2.getValue() - o1.getValue();
}
});
return list;
}
}
- getWordcount()方法:统计单词出现的次数,然后存储在Map当中。
public Map getWordcount() {//统计每个单词出现次数
String []wordnum=text.split("\\s+");
for(int i=0;i<wordnum.length;i++) {
if(wordnum[i].length()>=4) {
char c;
for (int j = 0; j < 4; j++) {
c = wordnum[i].charAt(j);
if (!(c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z')) {
if(wordcount.get(wordnum[i]) != null) {
wordcount.put(wordnum[i], wordcount.get(wordnum[i])+1);
}
else {
wordcount.put(wordnum[i], 1);
}
}
}
}
}
return wordcount;
}
六、单元测试
覆盖率:
七、结合在构建之法中学习到的相关内容与结对项目的实践经历,描述结对的感受,是否1+1>2?
这一次的结对编程很有意思,有了伙伴的感觉就是不一样,做事起来都积极一些,不会像一个人的时候不想做就等会再做;结对对于我来说是1+1>2的,每个人知道的东西不一样,会的东西也不一样,这样就可以进行互补,也有人分担一下,很棒;我想之后的团队应该会更有趣,有些期待。