202103226-1 编程作业

这个作业属于哪个课程 软工-2018级计算机二班
这个作业要求在哪里 202103226-1 编程作业
这个作业的目标 代码规范,熟悉git和码云的使用
学号 20188434
其他参考文献 腾讯C++代码规范

目录

gitee仓库地址

码云项目地址

PSP表格

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

解题思路描述

filereader和filewriter读写的使用,然后划分出三个功能,一个用来统计字符,一个用来统计行数,一个来进行单词总数和单词词频的统计。

代码规范指定链接

腾讯C++代码规范

设计与实验过程

统计字符数,按字符流的形式来读取文件并将总数返回

public int CountChar(String inpath) {
        File file = new File(inpath);
        int i = 0; 
        try {
            String name = file.getName();
            System.out.println("File:" + name);
            FileReader fr = new FileReader(file);
            BufferedReader bufr = new BufferedReader(fr);
            while(((char) bufr.read()) != (char)-1){
                i++;//按字符读取文本内容
            }
            bufr.close();
            fr.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return i;
    }

统计行数,只要文件还有行就读下去并将计数值+1,并将行数返回

public int CountLine(String inpath){
        File file = new File(inpath);
        int i = 0;
        try {
            String name = file.getName();
            System.out.println("File:" + name);
            FileReader fr = new FileReader(file);
            BufferedReader bufr = new BufferedReader(fr);
            while (bufr.readLine() != null) {
                i++;
            }
            bufr.close();
            fr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return i;
    }

这些单词进行匹配,符合前4位都为英文字符的放置与map中,若是初次匹配成功则值位1,之后加1,之后进行排序并且同时进行单词总数的统计用sum变量保存

int sum=0;
String regex = "[a-zA-Z]{4,}[a-zA-Z0-9]*";
for(String word :words) {
                    if (word.matches(regex)) {
                        if (map.get(word) == null) {
                            map.put(word, 1);
                            sum++;
                        } else {
                            map.put(word, map.get(word) + 1);
                            sum++;
                        }
                    }
                }

通过List的大小得出单词种类数,若单词数目不够10种时则就把这些词频数据都输出,还有list储存的单词词频内容连同传进来的characters和lines值一起输出到目标文件

FileWriter out = new FileWriter(outpath);
int n = list.size();
out.write("characters:"+charNum+"\n");
out.write("words:"+sum+"\n");
out.write("lines:"+lineNum+"\n");
if (n>10){
      n=10;
}
for (int i = 0; i < n; i++) {
   out.write(list.get(i).getKey()+":"+list.get(i).getValue()+"\n");
}

计算模块接口部分的性能改进

个人能力有限,尝试过但是目前无法明显改进性能

单元测试




异常处理说明

有个小问题还没处理,就是统计词频的部分,统计出来的单词都是乱序,不是正确的单词顺序,时间有限这个问题目前还没处理好

心路历程与收获

这次作业对我来说还是很有难度的,所以为了完成这次作业,我问了身边很多同学,学习了很多以前不知道知识,让我更加熟悉了码云的使用,用git上传代码到码云以及eclipse连接码云等,同时也提升了自己的编程能力,这次应该算是这学期第一次码代码吧,也是很久没码代码了,很多用法都有些生疏了,再一次巩固了自己的编程知识,这次作业还是受益匪浅的。

posted @ 2021-04-02 18:30  lyp82ndlfjh  阅读(32)  评论(0编辑  收藏  举报