结对作业-WordCount进阶版
1.在文章开头给出博客作业要求地址。
博客园地址:https://www.cnblogs.com/happyzm/p/9559372.html
2.给出结对小伙伴的学号、博客地址,结对项目的码云地址。
结对小伙伴的学号:201621123012
博客地址:https://www.cnblogs.com/saodeyipi/p/9756450.html
结对的码云地址:https://gitee.com/wistarias/PersonalProject-Java
3.给出结对的PSP表格。
| PSP2.1 | 结对开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
|---|---|---|---|
| Planning | 计划 | 10 | 5 |
| · Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 5 | 0 |
| Development | 开发 | 150 | 200 |
| · Analysis | 需求分析 (包括学习新技术) | 10 | 15 |
| · Design Spec | 生成设计文档 | 10 | 0 |
| · Design Review | 设计复审 | 10 | 5 |
| · Coding Standard | 代码规范 | 0 | 0 |
| · Design | 具体设计 | 10 | 20 |
| · Coding | 具体编码 | 100 | 120 |
| · Code Review | 代码复审 | 10 | 5 |
| · Test | 测试(自我测试,修改代码,提交修改) | 10 | 25 |
| Reporting | 报告 | 10 | 6 |
| · | 测试报告 | 5 | 2 |
| · | 计算工作量 | 5 | 2 |
| · | 并提出过程改进计划 | 0 | 0 |
4.设计实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?单元测试是怎么设计的?
1.这个程序我负责的是对文件的行,单词数,字符数,单词频率的计算,我的搭档负责的是图形化的界面。
public class words //文件读取并完成对行,单词数,字符数,单词频率的计算
2.在类中一共有6个函数
public static int line(String filename) //文件读取并完成对行的计算
public static int bytenumber(String filename) //文件读取并完成对字符数的计算
public static int wordnumber(String filename)//文件读取并完成对单词数的计算
public static List<Map.Entry<String, Integer>> out(String filename)//文件读取并完成对单词频率的计算
public static List<Map.Entry<String, Integer>> out(String filename, int h)//文件读取并完成对指定数量单词频率的计算
public static List<Map.Entry<String, Integer>> outg(String filename, int k)//文件读取并完成对指定数量单词组的计算
5.代码说明。展示出项目关键代码,并解释思路与注释说明。
1.关键代码
(1)line(String filename)
while ((line = bufReader.readLine()) != null) {
for (int i = 0; i <= line.length() - 1; i++) {
if (Character.isUpperCase(line.charAt(i))) //对大写字母的判断
{
Character.toLowerCase(line.charAt(i));
}
}
linecount++;//行数统计
text.add(line);
}
文件读取并完成对行的计算
(2)bytenumber(String filename)
while ((line = bufReader.readLine()) != null) {
for (int i = 0; i <= line.length() - 1; i++) {
if (Character.isUpperCase(line.charAt(i))) //对大写字母的判断
{
Character.toLowerCase(line.charAt(i));
}
}
wordcount += line.length();//字符数统计
text.add(wordcount );
}
文件读取并完成对字符数的计算
(3)wordnumber(String filename)
for (String words : text) {
String[] word = words.split("[^a-zA-Z0-9]");
for (String pp : word) {
String regex = "^[a-z]{4}[a-z0-9\\s]*$";
if (pp.matches(regex) == true) {
text2.add(pp);
}
}
}
return text2.size();
文件读取并完成对单词数的计算
(4)out(String filename)
Map<String, Integer> map = new TreeMap<String, Integer>();
for (String word : text2) {
if (map.get(word) != null) {
map.put(word, map.get(word) + 1);
} else {
map.put(word, 1);
}
}
List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
List<Map.Entry<String, Integer>> infoIds1 = new ArrayList<Map.Entry<String, Integer>>();
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
});
System.out.println("--------------排序后--------------");
for (int i = 0; i < infoIds.size(); i++) {
Entry<String, Integer> ent = infoIds.get(i);
if (i <= 9) {
infoIds1.add(ent);
}
}
return infoIds1;
文件读取并完成对单词频率的计算
2.代码测试


3.代码的提交

6.单元测试
测试数据
c1.txt:空文件
c2.txt:包含英文,特殊字符,中文等
c3.txt:一篇完整的英语的短文
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.junit.Before;
import org.junit.Test;
import one.jiekou;
public class jiekouTest {
@Before
public void setUp() throws Exception {
}
@Test
public void testWordnumber() {
assertEquals(0, jiekou.wordnumber("C:/Users/Administrator/Desktop/c1.txt"));//空文件
assertEquals(14, jiekou.wordnumber("C:/Users/Administrator/Desktop/c2.txt"));//14个单词的纯英文
assertEquals(160, jiekou.wordnumber("C:/Users/Administrator/Desktop/c3.txt"));//160个单词的英文数字混合
}
@Test
public void testbytenumber() {
assertEquals(0, jiekou.bytenumber("C:/Users/Administrator/Desktop/c1.txt"));
assertEquals(136, jiekou.bytenumber("C:/Users/Administrator/Desktop/c2.txt"));
assertEquals(1505, jiekou.bytenumber("C:/Users/Administrator/Desktop/c3.txt"));
}
@Test
public void testout() {
Map<String, Integer> map2 = new TreeMap<String, Integer>();
Map<String, Integer> map3 = new TreeMap<String, Integer>();
map2.put("xmkczui84", 4);
map2.put("agisckxvn", 4);
map3.put("puma", 9);
map3.put("from", 4);
List<Map.Entry<String, Integer>> map = new ArrayList<Map.Entry<String, Integer>>(
map2.entrySet());
List<Map.Entry<String, Integer>> map1 = new ArrayList<Map.Entry<String, Integer>>(
map3.entrySet());
assertEquals(map, jiekou.out("C:/Users/Administrator/Desktop/c2.txt", 2));
assertEquals(map1, jiekou.out("C:/Users/Administrator/Desktop/c3.txt", 2));
}
@Test
public void testoutg() {
Map<String, Integer> map3 = new TreeMap<String, Integer>();
Map<String, Integer> map2 = new TreeMap<String, Integer>();
map3.put("accumulate experts from felt obliged", 1);
map2.put("america when reports came into", 1);
List<Map.Entry<String, Integer>> map1 = new ArrayList<Map.Entry<String, Integer>>(
map3.entrySet());
assertEquals(map3, "{" + jiekou.outg("C:/Users/Administrator/Desktop/c3.txt", 5).get(0) + "}");
assertEquals(map2, "{" + jiekou.outg("C:/Users/Administrator/Desktop/c3.txt", 5).get(1) + "}");
}
}

7.效能分析


8.结合在构建之法中学习到的相关内容与结对项目的实践经历,描述结对的感受,是否1+1>2?。
进行结对编程遇到的问题比我想象的多,在开始决定要做网页还是gui时就产生了不同的想法,之后在代码分工时碰到分工的不明确,导致有些功能重叠,还有就是有个人写得较快时,另一个人没有写好,这导致另一个人的进度不得不放缓。最后的一个问题是大家的代码风格不太相同,所以在对接时容易遇到一些问题。当然这结对编程也是有好处的,当其中一方比较放松时,另一方的需求就会时时激励你不断的前进。而且要写的代码量减少了很多,总的来说还是1+1>2的。
结对作业-WordCount进阶版的更多相关文章
- 结对作业——WordCount进阶版
Deadline: 2018-10-7 22:00PM,以博客提交至班级博客时间为准 要求参考来自:https://www.cnblogs.com/xinz/archive/2011/11/27/22 ...
- 第二次结对作业-WordCount进阶需求
原博客 队友博客 github项目地址 目录 具体分工 需求分析 PSP表格 解题思路描述与设计实现说明 爬虫使用 代码组织与内部实现设计(类图) 算法的关键与关键实现部分流程图 附加题设计与展示 设 ...
- 结队第二次作业——WordCount进阶需求
结队第二次作业--WordCount进阶需求 博客地址 051601135 岳冠宇 博客地址 051604103 陈思孝 博客地址 Github地址 具体分工 队友实现了爬虫功能,我实现了wordco ...
- 结对第2次作业——WordCount进阶需求
作业题目链接 队友链接 Fork的同名仓库的Github项目地址 具体分工 玮哥负责命令参数判断.单词权重统计,我只负责词组词频统计(emmmm). PSP表格 预估耗时(分钟) 实际耗时(分钟) P ...
- 结对作业二——WordCount进阶版
软工作业三 要求地址 作业要求地址 结对码云项目地址 结对伙伴:秦玉 博客地址 PSP表格 PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟) Planning 计划 10 7 · ...
- 《软件工程实践》第五次作业-WordCount进阶需求 (结对第二次)
在文章开头给出结对同学的博客链接.本作业博客的链接.你所Fork的同名仓库的Github项目地址 本作业博客链接 github pair c 031602136魏璐炜博客 031602139徐明盛博客 ...
- 软工实践第五次作业-WordCount进阶需求
软工实践作业(五) GitHub 作业链接 结对博客 031602240 具体分工 PSP表格 代码规范 解题思路与设计说明 爬虫使用 代码组织与内部实现设计(类图) 算法关键 实现方法 流程图 附加 ...
- 软工实践——结对作业2【wordCount进阶需求】
附录: 队友的博客链接 本次作业的博客链接 同名仓库项目地址 一.具体分工 我负责撰写爬虫爬取信息以及代码整合测试,队友子恒负责写词组词频统计功能的代码. 二.PSP表格 PSP2.1 Persona ...
- 结对作业(1.0版)(bug1已修复)
import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing ...
随机推荐
- MVC中Ajax post 和Ajax Get——提交对象Model
HTTP 请求:GET vs. POST两种在客户端和服务器端进行请求-响应的常用方法是:GET 和 POST.GET - 从指定的资源请求数据POST - 向指定的资源提交要处理的数据GET 基本上 ...
- python's fifteenth day for me 递归函数
递归... def age(n): if n == 1: return 18 else: return age(n-1)+2 # 反复调用函数age() print(age(4)) l = [1,3, ...
- storm集群配置以及java编写拓扑例子
storm集群配置 安装 修改配置文件 使用java编写拓扑 storm集群配置 storm配置相当简单 安装 tar -zxvf apache-storm-1.2.2.tar.gz rm apach ...
- KMP算法详解(转)
转自http://www.matrix67.com/blog/archives/115 通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验证是否匹配.假如A串长度为n,B串长度为m,那么这种方 ...
- Vue 简单的总结一
let 变量 1. 局部作用域 2. 不会存在变量提升 3. 变量不能重复声明 const 变量 1. 局部作用域 2. 不会存在变量提升 3. 变量不能重复声明 4. 只能声明常量,不可变得量 th ...
- CRF++评测脚本CoNLL 2000
关于CRF++工具如何使用这里就不再赘述了,网上相关资源很多,如官方提供的http://crfpp.googlecode.com/svn/trunk/doc/index.html.虽然http://w ...
- 手把手教你如何优化linux服务器
关闭不需要的服务.列出需要启动的的服务crond.network.sshd.irqbalance.syslog 启用 irqbalance 服务既可以提升性能,又可以降低能耗. syslog 是 li ...
- GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏
GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏 GridView 导出成Excel文件,这个代码在网上比较多.但是发现存在一个问题,导出的数据中如果有&q ...
- BurpSuite—-decoder模块(编码模块)
一.简介 Burp Decoder是Burp Suite中一款编码解码工具,将原始数据转换成各种编码和哈希表的简单工具,它能够智能地识别多种编码格式采用启发式技术. 二.模块说明 通过有请求的任意模块 ...
- Pascal三角形
Pascal算法呢,很简单,因为有了推导公式nCr,而当我们刚刚接触一个事物时,面对要解决的问题,归纳分析得到规律,再通过编程,控制流程,对象,语言,方法,属性得到我们想要的结果.如果这次不是PAsc ...