一.本次作业的GITHUP地址
GIT地址 | https://github.com/kubaiyi/WordCount |
GIT用户名 | kubaiyi |
结对伙伴博客地址 | https://www.cnblogs.com/Nauthiz/ |
博客地址 | https://www.cnblogs.com/singqp/ |
作业链接 | 第三次作业结对编程 |
二.PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
Planning | 计划 | 20 | 20 |
Estimate | 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 600 | 710 |
Analysis | 需求分析 (包括学习新技术) | 50 | 40 |
Design Spec | 生成设计文档 | 30 | 20 |
Design Review | 设计复审 (和同事审核设计文档) | 20 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 15 |
Design | 具体设计 | 30 | 45 |
Coding | 具体编码 | 360 | 300 |
Code Review | 代码复审 | 60 | 50 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 |
Reporting | 报告 | 90 | 70 |
Test Report | 测试报告 | 40 | 30 |
Size Measurement | 计算工作量 | 30 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 10 |
合计 | 710 | 800 |
三.解题思路
题目要求是对txt文件中的内容进行各种统计,于是首先应该读取文件内容并存入一个字符串对象中,之后再对这个字符串进行一系列操作,最终得出统计结果。读取文件可能会遇到异常,所以在进行读取文件时必须使用try catch语句来防止异常导致的程序中断。对于统计字符数,很简单,不必详细说明,只需注意是否有汉字字符;针对单词个数,则要用字符串数组来解决,首先应将数组全部初始化为空字符串,再将符合条i间的单词存入数组,而最终数组中有多少个非空字符串即表示有多少个单词;对于统计行数,则比统计字符数跟为简单,仅统计字符串中有多少个换行符即可;之后的统计单词的词频和字典序排序,则需要对原字符串数组进行遍历,并破坏其中的相同单词的存储方式,之后用Dictionary类进行字符串数组的排序,最终输出单词和它的词频。
四.关键代码说明
1.统计字符数
函数接受一个字符串对象content,该对象内存有文件中的内容,之后遍历该字符串,通过if找出有多少个汉字字符,每找到一个汉字字符,num就加1(num初始化为0),之后输出统计的字符数结果。(之所以要再减1是因为该字符串比源文件内容多了一个换行符,所以要减1)
2.统计单词个数
函数接收一个字符串对象content,该对象内有文件内容,之后定立两个字符串数组temp和str并都初始化为空字符串。为了方便统计,把原字符串的字母全部转化为小写字母,之后定义一个int类的num对象用于计数,首先遍历一遍字符串,判断字符是否是小写字母或者数字,若是则存入temp数组中(num作为下标),直到读取到非字母数字字符。若读取到非字母数字字符,则判断该字符串的前四位中是否有数字,若有则将该字符串初始化后再次进行循环,若无,则num加1。之后将temp数组的内容传给str数组,遍历str数组,若存在相同的单词,则num减1,并初始化其中的一个字符串。最终遍历完后的num值即为单词个数。
3.统计有效行数
函数接收一个字符串对象conten,该对象有文件内容。因为要统计行数,而每行内容的最后必定有一个换行符,所以仅需遍历有多少个换行符即可得出答案。
4.统计单词的词频和按字典序输出
函数接收一个字符串数组temp,这个字符串组数存有文件中的所有单词。定义一个字符串数组str,将temp数组的内容全部传入str,之后遍历str数组,每次每次大遍历将int类的t对象初始化为1,然后判断是否有相同的单词,若有,则t加1且后面相同的单词初始化为空字符串,而每次遍历到空字符串时就直接continue,每次大循环结束时将单词和t传入Dictionary类的对象。之后通过一行语句进行字典序排序。最终再遍历这个排序后的dicSort即可得到答案
五.运行效果
1.单元测试效果
2.效能运行
3.项目运行效果
六.代码规范
1.对函数的命名使用该函数功能的英文缩写,并使用驼峰命名法。
2.变量的名称直接使用英语表示。
3.中间过渡变量统一为temp,循环变量用i,j,k...
4.一行只写一个语句。
七.结对编程总结
我和结对伙伴是室友,所以共同讨论和相处的时间较多,并且直接使用一台电脑进行编程,减少了不必要的麻烦。其中比较简单的部分,统计字符个数和统计行数由室友编写,我在一旁审查。其余部分由我独立完成
其中用到的一些之前没有使用过的函数由双方共同查询资料所得。两人在编写代码之前前先将代码的架构讨论清楚,需要哪些函数,方法,需要定义哪些变量等,两个人一起商量时比一人能考虑到更多东西。同时一
人写,一人看,很容易就检差出了一些笔误,逻辑漏洞等问题。