• 结对编程—词频统计


    作业要求


    • [必做 1] 基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件。 (第一阶段初稿完成该要求)
    • 命令行格式: 提示符> Myapp.exe -f filename.txt > Result.txt (PS:C++ 程序,Java 程序输出方式类似) filename.txt 为前面下载的文件名。
    • 解释:
      • 选项 -f 表示后面跟文件名
      • 输出格式规定(参考作业3中的示例):
        • 首先按照频率由高到低排序
        • 频率一样的词, 按照字典顺序排序
    • 此外, 读取一个较大的文本文件Gone_with_the_wind.txt实验对比程序执行效率,做如下改进,比较改进前后程序执行时间。

    本次和舍友 范鋆 同学一起合作完成 他的博客地址

     
    合作图片
    编程语言 JAVA
    编译环境 eclipse
     
    本次作业中我们遇到了比较大的困难,在第三次作业中我使用了c++编程。但是由于算法过于复杂在运行给出的大文件时程序崩溃。
    应该是由于c++中数组的内存空间有限导致的。这段时间在学习java,所以在和舍友讨论后决定使用java语言完成此次作业。
     
    我主要负责文件结果的输出部分主要代码如下
    public static void sort(Map<String,Integer> map){  
            List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());   
            Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {     
                public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {     
                    return (o2.getValue() - o1.getValue());     
                }     
        }); //排序 
            String [] str3=null; 
            int len=infoIds.size();
            int count=1;
            
        try{
            FileWriter fw=new FileWriter("Result1.txt");
            BufferedWriter bw=new BufferedWriter(fw);
            int q=0;
            for (int i = 0; i < len; i++) 
            {   //输出  
                Map.Entry<String, Integer> id = infoIds.get(i); 
                if(id.getKey()!=null)                                       
                      str3=id.getKey().split("");
                    if( str3!=null&&str3.length>3)                     //str3可能为空,且这个控制只有含有3个字母以上的单词才打印
             if(count<=5)
              {
                 q=id.getValue();
                 bw.write(id.getKey());
                 bw.write(":  ");
                 bw.write(String.valueOf(q));
                 bw.write("	");
                 count++;
              }
             else
             {
               q=id.getValue();
               bw.write(id.getKey());
               bw.write(":  ");
               bw.write(String.valueOf(q));
               bw.write("
    ");       //换行
               count=1;
             }
            }
            bw.close();fw.close();
        }catch(Exception e){
            e.printStackTrace();} 
        } 
    }   

    程序结果

    总结心得

    通过本次合作编程,我意识到了合作的重要,两个人往往想法比一个人丰富。也很少会犯低级错误,写程序的效率大大提高了。

  • 相关阅读:
    SQL Server 中WITH (NOLOCK)浅析
    C#中Monitor对象与Lock关键字的区别分析
    lock,Monitor,Mutex的区别
    如何在windows7中使用“专用字符编辑器”中的字
    ppapi,npapi
    配置OpenLDAP,Java操作LDAP,DBC-LDAP进访问
    List of Mozilla-Based Applications
    TLS协议分析
    编译Chrome详细步骤
    黑客惯用软件
  • 原文地址:https://www.cnblogs.com/sunhongyi/p/5309084.html
Copyright © 2020-2023  润新知