202103226-1 编程作业

这个作业属于哪个课程 <https://edu.cnblogs.com/campus/zswxy/computer-science-class4-2018>
这个作业要求在哪里 <https://edu.cnblogs.com/campus/zswxy/computer-science-class4-2018/homework/11880>
这个作业的目标 <Github的使用,代码规范使用>
作业正文 202103226-1 编程作业
其他参考文献 《软件工程》、《构建之法》
目录:
1.项目地址
2.PSP表格
3.解题思路
4.代码规范
5.接口的设计与实现过程
6.性能改进
7.单元测试
8.异常处理说明
9.心路历程与收获

1.项目地址
项目地址

2.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) |
| --------------------------------------- | -------------------------------- | -------- | -------- |
| Planning | 计划 | 20min | |
| • Estimate | • 估计这个任务需要多少时间 | 70min | 70min |
| Development | 开发 | 30min | 30min |
| • Analysis | • 需求分析 (包括学习新技术) | 120min | 120min |
| • Design Spec | • 生成设计文档 | 50min | 50min |
| • Design Review | • 设计复审 | 30min | 30min |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10min | 10min |
| • Design | • 具体设计 | 120min | 120min |
| • Coding | • 具体编码 | 120min | 120min |
| • Code Review | • 代码复审 | 20min | 20min |
| • Test | • 测试(自我测试,修改代码,提交修改) | 30min | 30min |
| Reporting | 报告 | 90min | 90min |
| • Test Repor | • 测试报告 | 30min | 30min |
| • Size Measurement | • 计算工作量 | 30min | 30min |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30min | 30min |
| 合计 | | 800min |

3.解题思路描述

  • 需求:
  1. 统计文件的字符数(对应输出第一行):
  2. 统计文件的单词总数(对应输出第二行),单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
  3. 统计文件的有效行数(对应输出第三行):任何包含非空白字符的行,都需要统计。
  4. 统计文件中各单词的出现次数(对应输出接下来10行),最终只输出频率最高的10个。
    当初这个看这个题目的时候内心是崩溃的,文字描述对于我来说不易于看懂,所以对这个题目具有畏惧心理,后面问了同学之后,他给我讲了重点,以及教我一些相关的操作,我再重新分析这个问题,抓到重点之后就开始有那么一点感觉了。

4.代码规范
点我

5.接口的设计与实现过程
先定义一个接口,这个接口中有需要的方法。再实现它。接口内容如下:
ong getCharCount();// 字符数 long getWordCount();// 单词数 long getLineCount();// 有效行数 Map<String, Long> getWordFrequency();// 词频(最多10个单词)
统计字符数
直接读取文件的字符数即可。
path.toFile().length()
统计单词数
这个可以分为以下步骤

1.通过分隔符分割字符串
可以通过 String 的 split 方法实现
2.判断字符串是否为单词
可以通过正则匹配或者简单的字符串比较实现。
3.单词计数
把所有单词存放到数组中,数组大小即为单词数量。
Files.lines(path)// 分行,以**系统**的换行符为分隔符 .map(String::toLowerCase)// 转小写,因为不管是输入还是输出,都不区分大小写。另外这个 map 往下移动的话,正则的“a-z”后面要加个“A-Z” .flatMap(CounterHelper::split)// 分词: str -> Arrays.stream(str.split("[^a-z0-9]+")),非单词字符作为分隔符 .filter(CounterHelper::isWord)// 保留单词: str -> Pattern.compile("[a-z]{4,}[a-z0-9]*").matcher(str).matches(),只有符合要求的单词才会被保留下来 .toArray(String[]::new)

6.性能改进
对于我来说暂时不能够将它改进

7.单元测试

8.异常处理说明
如果参数两个以上,默认选最先输入的两个

9.PSP图
| PSP2.1 | Personal Software Process Stages | 实际耗时(分钟) |
| --------------------------------------- | -------------------------------- | -------- | -------- |
| Planning | 计划 | 20min |
| • Estimate | • 估计这个任务需要多少时间 | 70min |
| Development | 开发 | 30min | |
| • Analysis | • 需求分析 (包括学习新技术) | 120min | |
| • Design Spec | • 生成设计文档 | 50min | |
| • Design Review | • 设计复审 | 30min | |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10min | |
| • Design | • 具体设计 | 120min | |
| • Coding | • 具体编码 | 120min | |
| • Code Review | • 代码复审 | 20min | |
| • Test | • 测试(自我测试,修改代码,提交修改) | 30min | |
| Reporting | 报告 | 90min | |
| • Test Repor | • 测试报告 | 30min | |
| • Size Measurement | • 计算工作量 | 30min | |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30min | |
| 合计 | | 800min | |

10.心路历程与收获
首先刚开始是一度想要放弃的,因为完全不知道从和下手,后面因为同学有写完了的,然后就告诉我写,才慢慢地开始动手,起初对GitHub是完全不懂得,看不懂不会操作,后来用的码云。这次作业让我对项目有了一个浅显的认识,它难得点就在于要按要求按规矩办事,不能按自己平时特立独行,并且要有对问题理解的能力。