结对编程—词频统计

作业要求


  • [必做 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();} 
    } 
}   

程序结果

总结心得

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

原文地址:https://www.cnblogs.com/sunhongyi/p/5309084.html