zoukankan      html  css  js  c++  java
  • 软工第二次作业

    软工第二周作业

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/computer-science-class1-2018
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-science-class1-2018/homework/11877
    这个作业的目标 理解如何在实战中运用软件工程这门学科的知识
    其他参考书籍 《码出高效_阿里巴巴Java开发手册》/《腾讯c++代码规范》/《Python PEP8》 《廖雪峰git教程》

    1、git项目代码地址

    https://gitee.com/sunzeliang/project-java/tree/master/
    https://gitee.com/sunzeliang/project-java

    2、代码规范制定链接

    https://gitee.com/sunzeliang/project-java/blob/master/20188413/codestyle.md

    3、解题思路与设计实现过程

      1、统计文件的字符数
      根据编码判断每个字符是不是我们所需要的。
      2、统计文件的单词总数
      采用正则表达式
      3、统计文件的行数
      通过readLine()获取行数
      并识别换行符
      4、统计单词频率,并输出频率最高的10个
      在分割出单词之后,将单词遍历储存在hashmap当中,在储存前先判断是否为合法单词
      将map的遍历储存在set当中
    

    统计字符个数

    while((value = bReader.read()) != -1) {
          if (value >= 0 && value<=255) {
              charcount++; 4     }
      }
    

    统计单词

    while ((line = bufferedReader.readLine()) != null) {
        String[] words = line.split("[^a-zA-Z0-9]+");
        for (String word : words) {
            word.toLowerCase();
            if (word.matches("[a-zA-Z]{4}[a-zA-Z0-9]*") ) {
                countword++;
            }
        }
    }
    

    统计文件行数

    while ((line = bufferedReader.readLine()) != null) {
           if (line.length() != 0 && !line.matches("\s+")) {
                 linecount++;
          }
     } 
    

    得出单词频率最高的十个单词

    在分割出单词之后,将单词遍历储存在hashmap当中,在储存前先判断是否为合法单词

    String str=st.nextToken();
    str = str.toLowerCase();
    if ((str.charAt(0) >= '9' || str.charAt(0) <= '0') && str.length() >= 4) {
        if(map.containsKey(str)) 
            map.put(str, map.get(str)+1);
        else map.put(str, 1);}
    
    
    

    将map的遍历储存在set当中

    
    Set<WordEntity> set=new TreeSet<WordEntity>();
    for(String s:map.keySet()){
         WordEntity wordEntry=new WordEntity(s,map.get(s));
         set.add(wordEntry);     
    }
    Iterator<WordEntity>  ite=set.iterator();
    int count=0;
    while(ite.hasNext()){
    if(count>=10) 
         break;
       System.out.println(ite.next());
       count++;
    }
    

    性能改进

    从最初的暴力解决一步步改善用hashmap存储对单词的遍历,map的遍历存储在set中,排序 TreeSet,对wordEntity实现comparable接口重写compareTo()和toString()。

    @Override
    public String toString() {
        writeInTxt.writeTxt( "<" + word + ">:" + count);
        return "<" + word + ">:" + count;
    }
    @Override
    public int compareTo(WordEntity O) {
        int cmp=count.intValue()-O.count.intValue();
        return (cmp==0?word.compareTo(O.getKey()):-cmp);
    }
    

    接口

    public interface WordCount {
    
        /**
         * 返回行数
         * @param filename
         * @return
         * @throws IOException
         */
        int linesCount(String filepath) throws IOException;
    
        /**
         * 返回合法单词数
         * @param filepath
         * @return
         * @throws IOException
         */
        int wordsCount(String filepath) throws IOException;
    
        /**
         * 返回字符数
         * @param filepath
         * @return
         * @throws IOException
         */
        int charsCount(String filepath) throws IOException;
    
        /**
         * 词频前十的单词
         * @param filepath
         * @throws IOException
         */
        void wordDetail(String filepath) throws IOException;
    }
    

    单元测试

    代码覆盖率

    异常处理说明

    try{
        可能发生异常的代码块
    }catch(异常1){
        处理异常1的代码
    }
    

    计算模块异常,可能导致文件不存在。

    心路历程与收获

     对于本次作业还感到自己有很多的不足之处,还需努力学习,对于一些技术的用法还掌握的不够。还得深造。而且在完成本次作业的时候,感觉很吃力。没有之前那么轻松了,这次真正认识到的书到用时方恨少。
    也感受到了平时学习和积累的重要性。通过这次之后,我会挤出一部分课余时间来进行课外知识的学习。对于java的学习更要努力了。不过对git的指令越来越熟悉了。对于一些知识也有了一定的了解。在此次作业之后,
    定要回顾一下Java开发实战经典这本书。以及努力学习一下python。
    

    PSP表格

    PSP2.1 Personal Software Process Stages 预估时间(分钟) 实际消耗(分钟)
    Planning 计划 20 30
    Estimate 估计这个任务需要多少时间 10 20
    Development 开发 400 650
    Analysis 需求分析(包括学习新的资料) 60 180
    Design Spec 生成设计文档 15 20
    Design Review 设计复审 20 10
    Coding Standard 代码规范(为目前的开发制定合适的规范) 10 25
    Design 具体设计 60 80
    Coding 具体编码 300 500
    Code Review 代码复审 20 20
    Test 测试(自我测试,修改代码,提交修改) 60 100
    Reporting 报告 45 70
    Test Repor 测试报告 10 30
    Size Measurement 计算工作量 15 15
    Postmortem & Process Improvement Plan 事后总结,并提出过过程改进计划 30 35
    合计 1075 1785
  • 相关阅读:
    RII K25A 语音空中飞鼠 红外学习步骤
    淘宝导航栏颜色修改
    上海巨人网络参与网络诈骗整个流程
    xp的停止更新对我们有什么影响?
    USB3.0 和usb 2.0的区别
    一些有意思的脑际急转弯
    淘宝上 1200左右的组装电脑,真的性价比很高么?
    【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。
    网上下载的“上下3D”和“左右3D”影片该如何播放?
    电脑cmos是什么?和bois的区别?
  • 原文地址:https://www.cnblogs.com/neir/p/14608682.html
Copyright © 2011-2022 走看看