第一次编程作业

GitHub链接

1、PSP表格

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

二、计算模块接口

  • (3.1)计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。

一共有四个类。分别是IOUtils(负责输入输出),MAIN,PinyinUtils,acMachine(用于构造AC自动机)。其中AC自动机中fail指针的使用是主要的算法。使用fail指针可以大大提高效率。增加一个fail指针,如果当前点匹配失败,则将指针转移到fail指针指向的地方,这样就不用回溯,而可以路匹配下去了。

img

  • (3.2)计算模块接口部分的性能改进。记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2019、JProfiler或者Jetbrains系列IDE自带的Profiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。

    image-20210923220650891

  • (3.3)计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。

  • (3.4)计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。

    1、try catch异常

    public static String toPinYinFirstUpper(String str,String spera) {
        String pinYin;
        try {
            pinYin = record.toPinYin(str, spera, Type.FIRSTUPPER);
            if("0123456789".contains(pinYin)) {
                pinYin = numBerToPinyin(pinYin);
            }
            return pinYin;
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            return "";
        }
    }
    

2、IO异常

//文章读取
public static ArrayList<String> readWords(String words) throws IOException {
    File file = new File(words);
    FileInputStream fis = new FileInputStream(file);
    InputStreamReader fR = new InputStreamReader(fis, StandardCharsets.UTF_8);
    BufferedReader br = new BufferedReader(fR);
    ArrayList<String> strs = new ArrayList<>();
    String str;
    while ((str = br.readLine()) != null){
        strs.add(str);
    }
    br.close();
    fR.close();
    return strs;
}

三、心得

  • (4.1)在完成本次作业过程的心得体会

    这次作业感觉非常的难,花费了大量的时间,最后字的拆分以及部分拼音等屏蔽词也没有找出。但是java能力得到了提升,学习了maven等工具,学会了文件的输入输出等。过程很痛苦,但是还是学到了不少。

posted @ 2021-09-23 22:15  hjw13  阅读(84)  评论(0)    收藏  举报