第二次编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/computer-science-class3-2018/homework/11879
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-science-class3-2018/homework/11879v
这个作业的目标 <学习使用Github>
其他参考文献 ...https://blog.csdn.net/w2462140956/article/details/104965486

git地址:https://gitee.com/zhang-yanzi-421/project-java

PSP

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

统计输入字符数
使用string.split(""),将输入字符串拆分为单字符构成的数组,统计数组长度即为字符数。

let charArrat = data.split("");
return charArrat.length; 

统计输入单词总数
统计单词首先需要找出所有单词,首先根据给定的分隔符拆分出单词,分割符为空格,非字母数字符号,可以使用使/[A-Za-z0-9]/这一正则来表示,用string.split(reg)来根据正则把可能为单词的部分拆分出来;接下来是验证单词,遍历数组,使用[a-zA-Z]{4}规则来验证每一项是否为单词,如果不是,使用splice函数将其从数组中移出,最后返回数组长度即为单词总数。

let words = data.split(/[^A-Za-z0-9]/);
for(let i=0; i<words.length; i++) {
    if(words[i].length < 4) {
        words.splice(i, 1);
        i--;
    }
    const reg = new RegExp("^[a-zA-Z]{4}");
    if(!reg.test(words[i])) {
        words.splice(i, 1);
         i--;
    }
}
return words.length;

统计单词出现次数
首先根据统计单词总数的经验,拆分出单词数组(未校验格式);维护一个map,遍历数组检查格式符合后,将其转为小写,再检查map中当前单词是否存在,不存在则将当前单词为key,1为value加入map,否则更新单词对应value+1;

let words = data.split(/[^A-Za-z0-9]/);
let wordsMap = new Map();
for(let i=0; i<words.length; i++) {
    if(words[i].length < 4) {
        words.splice(i, 1);
        i--;
    }
    else {
        const reg = new RegExp("^[a-zA-Z]{4}");
        if(!reg.test(words[i])) {
            words.splice(i, 1);
            i--;
        }
        else{
            words[i] = words[i].toLowerCase();
            if(wordsMap.has(words[i])) {
                wordsMap.set(words[i], wordsMap.get(words[i])+1);
            }
            else {
                wordsMap.set(words[i], 1);
            }
        }
    }
}

心路收获
在这次的项目中,我复习了如何用github管理代码,也学到了不少新知识。我知道了原来不同的语言有不同的代码规范,并且制定了自己的Java代码规范。我也接触到了PSP表格这种估计开发时间的方法,在项目开发的过程中开始有意识地估计和记录各项工作的时间。我还学会了编写构建之法中提到的单元测试,我想单元测试对于复杂的项目是很重要的。在完成词频统计程序的开发的过程中,我学会了简单使用正则表达式,复习巩固了一些Java的知识,也锻炼了思考的能力。

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

posted @ 2021-04-02 08:38  小押尾巴  阅读(56)  评论(0)    收藏  举报