第二次编程

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/computer-science-class1-2018
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-science-class4-2018/homework/11880
这个作业的目标 完成项目
学号 20188537
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 50 70
• Estimate • 估计这个任务需要多少时间 240 360
Development 开发 100 110
• Analysis • 需求分析 (包括学习新技术) 30 30
• Design Spec • 生成设计文档 20 25
• Design Review • 设计复审 10 10
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 30 35
• Design • 具体设计 80 100
• Coding • 具体编码 180 200
• Code Review • 代码复审 50 60
• Test • 测试(自我测试,修改代码,提交修改) 20 20
Reporting 报告 50 50
• Test Repor • 测试报告 20 20
• Size Measurement • 计算工作量 30 30
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 10 10
合计 920 1210

项目链接:
https://gitee.com/shihao0701/project-c

解题思路:
1、统计文件的字符数
通过FileReader按字符读取文件,并且过滤非ASCII码字符。
2.统计文件单词总数,这里注意到“空格,非字母数字符号为分隔符”,故只需要遍历一遍文件,将其分割符统一设为空格,然后再调用java的字符串的split函数即可,注意还需要写一个函数判断单词的合法性
3.统计总的字符数,直接调用BufferedReader中的readline()方法,对每一行的字符数进行累加,最后加上行数就是文本中总的字符数。

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

1.读取文件数据


 public static String charactersCount(String filePath)
    {

        BufferedReader bReader=null;
        StringBuilder str=null;

        try 
        {
            FileReader reader=new FileReader(filePath);
            bReader=new BufferedReader(reader);
            str=new StringBuilder();
            int flag;
            //str.append(bufferedReader.read());
            while ((flag=bReader.read())!=-1)
            {
                str.append((char)flag);
            }
        } catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }finally 
        {
            try 
            {
                bReader.close();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }

        return str.toString();
    }

2.字符数统计



//字符数总数统计
    public static int charactersNumberCount(String str)
    {

    	//将字符串改为字符
        char[] ch = str.toCharArray();
        int num = 0;
        for(int i = 0; i < ch.length; i++) {
            if(ch[i] >= 0 && ch[i] <= 127) {
                num++;
            }
        }
        
        return num;
    }

3.按照单词出现频数进行排序



//按单词频率进行排序
    public List<Map.Entry<String,Integer>> SortMap()
    {

        List<Map.Entry<String,Integer>> wordList=new ArrayList<Map.Entry<String, Integer>>(wordsMap.entrySet());

        Collections.sort(wordList, new Comparator<Map.Entry<String, Integer>>() 
        {
        	
        	//利用匿名内部类实现排序
            @Override
            public int compare(Map.Entry<String, Integer> map1, Map.Entry<String, Integer> map2) 
            {
                if (map1.getValue().equals(map2.getValue()))
                {
                    return map1.getKey().compareTo(map2.getKey());
                }
                else 
                {
                    return map2.getValue()-map1.getValue();
                }
            }
        	
        });

        return wordList;
    }

输出结果:

心路历程与收获:学会了使用github上传自己的代码,初步编写了自己的代码规范和使用文档

原文地址:https://www.cnblogs.com/shihao0701/p/14612958.html