zoukankan      html  css  js  c++  java
  • 202103226-1 编程作业

    这个作业属于哪个课程 软件工程课程计算机科学与技术二班
    这个作业要求在哪里 编程作业
    这个作业的目标 学会软件工程流程 学会运用码云
    学号 <20188429>
    其他参考 CSDN 博客园 百度 Java
    码云地址 我的码云地址

    目录

    1、码云地址

    码云地址

    2、PSP表格

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

    3、解题思路描述

    3.1 功能描述:

    统计文件的字符数(对应输出第一行);
    统计文件的单词总数(对应输出第二行),单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
    统计文件的有效行数(对应输出第三行):任何包含非空白字符的行,都需要统计。
    统计文件中各单词的出现次数(对应输出接下来10行),最终只输出频率最高的10个。
    

    3.2

    (1)统计字符数:因为题目要求只需要统计ASCII码,且测试文件不会出现ASCII以外的字符。所以选择在读取后文件数据将其存入字符串后直接通过length()获取数据长度。
    (2)统计单词总数:因为单词要求——至少以4个英文字母开头,跟上字母数字,且以分隔符分割,不区分大小写。所以考虑使用正则表达式来判定单词。
    (3)统计有效行数:采取了跟统计单词总数一样采取正则匹配的方法。
    (4)统计单词输出频率:百度后采取了使用HashMap保存单词和使用频率

    4、代码规范

    5、计算模块接口的设计与实现过程

    设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(展示出项目关键代码),并解释思路,以及独到之处。

    5.1 4个主要功能函数,其余若干判断、I/O函数

    public Lib(String inputFile, String outputFile) //输入文件地址 输出文件地址
    
    public void handleFile() //调用
    
    public String readFile() //读取文件
        
    public void countCharacter(String str) //计算字符数
        
    public void countLine(String str)  //计算有效行数
        
    public void countWord(String str) //计算单词数
    
    public void sortWords()  //单词排序
    
    public void setOutputFile() //写入输出文件
    

    5.2文件读取:使用BufferedReader的reader()方法

    文件写入:使用BufferedWriter的writer()方法

     BufferedReader reader = new BufferedReader(new FileReader(inputFile));
     BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
    

    5.3. 统计字符数

    (对应输出第一行,空格,水平制表符,换行符,均算字符)根据作业要求,返回字符串的.length()即可。

    public void countCharacter(String str) {
        characterNum = str.length();
    }
    

    5.4.统计文件的单词总数

    (对应输出第二行),单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。
    先通过某种方法切分字符串,再过滤掉不符合格式的单词,不同方法性能有差距。可以使用StringTokenizer搭配正则表达式,逐个切分、匹配、计入有效单词。

    String[] list = str.split("[^A-Za-z0-9]"
    

    5.5 统计文件中各单词的出现次数

    (对应输出接下来10行),最终只输出频率最高的10个。(值降序,值相同的键字典序靠前的优先)将上一步中得到的单词频度HashMap通过排序,返回一个用于输出的频度列

    private Map<String, Integer> map;
    public List<Map.Entry<String, Integer>> wordsRank;
    public void sortWords() {
        wordsRank = new ArrayList<>(map.entrySet());
        Comparator<Map.Entry<String, Integer>> comparator = 
            (o1, o2) -> o2.getValue()- o1.getValue();
        wordsRank.sort(comparator);
    }
    

    7、单元测试

    8、异常处理说明

    在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。

    IO异常交给系统处理

    WordCount中的main()对于不足两个传入参数的异常

     public static void main(String[] args) throws IOException {
            if (args.length < 2) {
                System.err.println("Less than 2 parameters");
                return;
            }
    

    9、心路历程与收获

    收获:先说说收获吧,这次编程重拾了快被遗忘干净的Java语言,重新搜索学习Java里面的函数功能也算是一种不错的收获。其次,在这次作业中锻炼了自己的心态,这次的作业光要求就6300多个字,每次看到就头大还好最后还是坚持的完成了。同时也还收获了动手搜索的能力,比以前会更主动去解决问题而不是遇到问题就放弃。看了了解了阿里巴巴的代码规范,觉得自己要学会规范自己的代码习惯。

    心路历程:第一天看到作业,芜湖又是熟悉的博客园。然后一打开一看,芜湖更大的surprise,看着满满的题目要求,不仅考验软件编程及博客园相关,还考验提取关键信息的能力。在做这个作业过程中,伴随着自己的菜以及校园网的卡顿加上作业的繁琐,几乎绝望,甚至想过不交了,但是为了分数还是做了。以前的博客园虽然要求也多,但是局限于对于代码的一个编程,但是现在博客园不仅要求多同时更加考验阅读能力,不要被那么多字吓倒。然后继续加油吧!

  • 相关阅读:
    spring MVC的启动过程详解
    BeanFactory和applicationContext之间的区别
    spring的事务管理
    通用Mybatis的Crud搭建
    spring的IOC原理
    spring的AOP原理
    TortoiseSVN使用简介
    SVN简明教程
    POJO
    velocity 框架
  • 原文地址:https://www.cnblogs.com/lxzlyf2022/p/14597830.html
Copyright © 2011-2022 走看看