1.地址
- 博客作业要求地址:https://www.cnblogs.com/happyzm/p/9559372.html
- 码云项目地址:https://gitee.com/Fogram/PersonalProject-Java
2.PSP表格
PSP2.1 | 个人开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
---|---|---|---|
Planning | 计划 | 45 | 55 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 45 | 55 |
Development | 开发 | 365 | 515 |
· Analysis | 需求分析 (包括学习新技术) | 30 | 60 |
· Design Spec | 生成设计文档 | 30 | 25 |
· Design Review | 设计复审 | 25 | 20 |
· Coding Standard | 代码规范 | 10 | 15 |
· Design | 具体设计 | 20 | 30 |
· Coding | 具体编码 | 150 | 210 |
· Code Review | 代码复审 | 20 | 25 |
· Test | 测试(自我测试,修改代码,提交修改) | 30 | 45 |
Reporting | 报告 | 50 | 85 |
· | 测试报告 | 20 | 35 |
· | 计算工作量 | 10 | 20 |
· | 并提出过程改进计划 | 20 | 30 |
3.解题思路
- 审查题目,得知是要统计文件中字符、单词信息等,因此本题在编写代码时先要建立与文件的连接,因此初步设计一个FileRead类,编写方法读取文件内容,并先将数据存储起来(这里我将读取的数据存入了ArrayList中并返回),再交给另外一个类的功能来处理数据。
- 由于任务是通过前台传参文件名,在对处理文件的类中设计一个参数来记录文件名(路径)。
- 要求是对字符、非空白行数、单词总数、以及前10个出现次数最高的单词进行统计。思考后,发现单词需要根据是否符合条件(4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写)进行筛选,行数、字符数则不需要做过多的其他工作,因此将字符数统计以及行数统计直接交给了FileRead处理,Main中则直接调用其方法获得结果。单词方面,则暂不做处理,以多种不同分隔符分割出内容后,一概先存储到动态数组中,再另行判断是否为单词。
- 在Main中先调用FileRead的方法,获得存储文件内容数据的ArrayList,再根据要求对该动态数组的数据进行筛选,符合条件的存入Map映射中,不符合的则抛弃,在存入Map时,设计Map键值对类型为<String,Integer>,使单词与出现次数相对应,遍历动态数组,使用
toLowerCase()
方法全部转为小写,当检测到相同单词时,对次数加1,否则新存入一个单词赋次数值为1。 - 全部符合条件的值存入Map中后,根据出现次数降序排序,在不同单词数大于10时,输出前10个键值对,否则输出所有内容,即为输出频率最高的前10个单词。
4.设计实现过程
- 在类设计上,一共设计了两个类,FileRead类和主类Main。
- FileRead类设计了两个方法,一个是
FileRead(fileRoad)
方法,实现的功能是读取文件单词数据,并存入动态数组ArrayList;另一个方法是charsLinesCount(fileRoad)
方法,统计文件字符数和行数信息,两方法均为有参函数,传入文件名(路径)。 - Main类中则提供主函数入口,并调用了FileRead相应的方法获取数据。
5.代码说明
- FileRead类的
FileRead()
方法
这部分代码主要是将文件内容读取出来,并利用正则表达式给定的字符进行单词分割,并存入动态数组。 - FileRead类的
charsLinesCount()
方法
这部分代码是统计文件中的字符总数以及非空白行数。 Main()
方法
这部分代码调用FileRead类的相关方法获得数据,并进行处理排序最后输出。
6.测试结果及覆盖率
7.心得收获
- 本次实验总体上难度适中,但是可能是因为太久没有使用Java语言进行编程,显得有些生疏,对于起方法名、变量名等都暴露出了不少的问题。再加上前期规划较少,编程起来就显得有些混乱。
Mian()
里面似乎也放置了过多的不必要的代码块,显得极为冗余,背负了太多不属于它的代码。后期可能会这对命名以及代码放置的位置进行调整,把功能都分别装起来,减轻Main()
的负担。 - 收获方面,这一次收获比较大的是第一次接触到
PSP
表格,了解到了对于工程,是需要有具体的规划设计以及时间评估的,以便于后期能够更高效地完成工程。但因为是第一次接触,所以实际上似乎并没有起到多大的效果,后期会继续加强。 - 知识点方面,收获比较大的是利用正则表达式,指定多个分隔符来划分文件内容,另外就是第一次代码作业,让我意识到了Java编程方面的能力还是太弱了,需要加强练习了。