编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/computer-science-class1-2018
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-science-class4-2018/homework/11880
这个作业的目标 完成项目
学号 20188399

Gitee项目地址

gitee(https://gitee.com/gchProfessor/project-java/tree/master/20188399)

PSP表格

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

解题思路描述

主要有四个功能,对于这四个功能做出一下描述

统计字符数
构造一个BufferedReader类来读取文件,每当read()到一个字符,那字符数就加1.

统计有效行数
也是构造一个BufferedReader类来读取文件,但利用readling()方法,来读取文件的每一行,再对每行的字符串采用trim()方法来去除空行,若trim后还有内容则行数加1

统计单词数
一开始我利用的是逐步筛选那些由分隔符分开的字符串,先判断是否由字母数字构成,字母够不够4个等等,后来发现先分割后可以直接利用正则表达式可以直接匹配符合要求的字符串。所以最后采取正则表达式来匹配单词。

统计词频最高的十个单词
利用 TreeMap进行统计并且排序,循环将每行符合要求的单词放入到一个列表里,放入列表后再从列表中取出每个单词,寻找map中是否有重复的单词,有的话就将key put进去并且value+1,若为第一次出现则put 该key并设置value为1.
在将全部单词都放入map中后实施一个比较器将map进行降序排列,为什么用map.entry因为Entry可以一次性获得这两个值。

代码规范制定链接

codestyle(https://gitee.com/gchProfessor/project-java/blob/master/20188399/codestyle.md)

主要代码

计算行数并将读取的字符串送去处理

BufferedReader br = new BufferedReader(new FileReader(file));
//构造一个BufferedReader类来读取文件
            String s = null;
            while ((s = br.readLine()) != null) {
            //使用readLine方法,一次读一行
                addList(s);//将字符串送去筛选
                s.toLowerCase();
                //charNum+= s.length();这样读取导致错误
                if (s.trim().length() == 0) continue;
                else {
                    result = result + "\n" + s;
                    lineCount++;
                }
            }
                br.close();

字符串的处理(分割字符串),并计算单词数

    public void addList(String srl) {
    //string from readline 将判定为的单词放入List中
        srl = srl.trim();
        //String[] wordArray = srl.split("[a-zA-Z]{4}([a-zA-Z0-9])*");
        //String[] wordArray = srl.split("[0-9A-Za-z]+");

        String [] wordArray  = srl.split("\\W+");//分割单词
        Pattern p = Pattern.compile("[a-zA-Z]{4}([a-zA-Z0-9])*");
        //匹配以>=4位字母开头
        for (String listWord : wordArray) {
            Matcher m = p.matcher(listWord);
            if (listWord.length() != 0 && m.find()) {
                list.add(listWord);
                wordNum++;
            }
        }
    }

异常处理说明

对于检查异常,有2种不同的处理方式:使用try…catch…finally语句块处理它。或者,在函数签名中使用throws 声明交给函数调用者caller去解决。这次项目采用try…catch…finally语句块处理异常

        catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }

心得与收获

在这次的项目中,我复习了如何用gitee管理代码,也学到了不少新知识,制定了自己的Java代码规范。我也接触到了PSP表格这种估计开发时间的方法,在项目开发的过程中开始有意识地估计和记录各项工作的时间。

这次的作业接触到的新东西比较多,感觉有点难,有需要学习的新知识,会遇到一些问题,文档的写作也和较以往的作业比不同,希望经过这一次的练习,我能在以后的作业中做得更快更好。

posted @ 2021-04-02 19:20  gchPro  阅读(44)  评论(0)    收藏  举报