1.使用java代码,对存放在java工程下的Word.txt中的全部单词进行统计。 2.按照需求,将指定单词统计的结果按照要求的方式显示出来(题目要求按照柱形图的形式显示)。 3.高频单词的统计功能,输入整数K,按照单词的词频数显示前K个数以及单词。 4.将1中的统计结果写入到result.txt中。 5.要求代码健壮,代码简介,代码质量高。
1.基本功能: a.首先要实现全部单词的统计,为之后找指定单词的统计奠基基础,便于进行比较。 b.在将全部单词都已统计的基础上,对出现次数最多的单词进行显示,并显示前k个数。(k为输入的正整数) c.在指定单词查找成功后,显示出该单词在文章中的出现次数的柱形图。 d.将基本功能中的统计出的单词的统计结果写入到result.txt中。
我主要设计了两个类,即Test测试类和WordCount统计词数两个类,Test主要是主测试类,它是程序运行的入口,主要是实现各个功能模块的实现,a.指定单词的查找以及其柱形图的显示。b.高频单词的查找。c.将统计结果存放至result中。其次一个类是Wordcount类,它主要实现方法的封装,便于主测试类对其的调用,增强代码的健壮性。 我主要涉及了缓冲流的使用,以及输入输出函数的频繁使用,以及集合的使用,以及可视化界面的应用。
1.程序运行截图:
指定单词的查找以及柱形图:java
高频词数的统计:git
将统计好的单词存放至result.txt中:github
//高频词数的统计以及显示 public void two(TreeMap<String,Integer> map,int k){ //传入参数k,以及集合map ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet()); //声明集合list //接口的实现传递给Collections.sort方法 Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { return o2.getValue() - o1.getValue(); } }); //输出前k个数 for(int i = 0; i<k; i++){ System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue()); } }
缘由:我刚开始在进行高频单词统计的时候,遇到了不少的问题,在网上查找了不少关于排序方法以及资料。刚开始想到简单的排序方法,可是有考虑map集合中的元素是以键值对的形式存放,是比较繁琐的,就想到用比较器Comparator,它能对不一样类型的对象进行排序,它排序的依据是基本类型,也不用本身实现排序算法,用起来很方便。对任意类型集合对象进行总体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序。在i<k的状况下,即显示的个数小于map中单词的总个数,程序正常运行。以前用的HashMap,List等集合比较多,此次用了TreeMap,主要是它自己就有排序的功能,应用在这里是比较方便的。
个人设计思路:首先,我是以个人Test类为核心,根据老师提出的要求,将其划分红主要的三个模块,根据输入的模块的指定的数字,实现其指定的功能,在WordCount中直接调用已封装好的方法,将各个模块功能封装在另类,减小了代码与代码之间的依赖性和不相关性,提升了代码的独立性,方便之后不会出现修修改改代码的状况,在其余地方应用该功能时,只须要直接调用改方法便可,不须要再修改原码,这样代码会有很强的健壮性和高质量性,便于之后的开发。算法
PSP2.1 | 任务内容 | 计划共完成须要的时间(min) | 实际完成须要的时间(min) |
Planning | 计划 | 6 | 5 |
Estimate | 估计这个任务须要多少时间,并规划大体工做步骤 | 10 | 14 |
Development | 开发 | 200 | 300 |
Analysis | 需求分析 (包括学习新技术) | 3 | 5 |
Design Spec | 生成设计文档 | 5 | 7 |
Design Review | 设计复审 (和同窗一块儿审核设计文档) | 5 | 8 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 3 | 3.5 |
Design | 具体设计 | 14 | 15 |
Coding | 具体编码 | 180 | 260 |
Code Review | 代码复审 | 6 | 9 |
Test | 测试(自我测试,修改代码,提交修改) | 6 | 5 |
Reporting | 报告 | 10 | 13 |
Test Report | 测试报告 | 6 | 10 |
Size Measurement | 计算工做量 | 5 | 8 |
Postmortem & Process Improvement Plan | 过后总结 ,并提出过程改进计划 | 5 | 5 |
总结:本身这个项目是计划的很顺利,思路很清晰的。可是在实际开发中是仍是遇到了很大的问题,在写柱形图这块的时候,确实遇到很大的问题,包括继承JFrame类,以及Paint中一些方法的使用。还有在高频词统计的时候,对比较器的使用,仍是不太熟练的,花费了较多的时间。模块化
源代码连接地址:https://github.com/runju/WordCount函数