第一次实训_结对编程

 第一次实训-----词频统计

 


 

结对成员:14011022 李    爽

     16012021 沈梦然

码云仓库地址:https://gitee.com/smr_777/Wordstatistics/tree/master

 


 

                过程图片

 第一次实训_结对编程


 

解题思路 :

希望实现以下效果:

  • 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。
  • 2.统计英文单词在本文件的出现次数
  • 3.将统计结果排序
  • 4.显示排序结果

根据二人齐力百度搜索,借鉴几篇代码以及程序框图的形式最先分析明白要想实现词频统计需要以下主要操作

第一需要使用FileReader、BufferedReader读取文件

第二需要对于字符标点进行分割

第三对于文本文档进行统计使用Hashmap保存统计数据

第四key统计单词,value统计单词次数,value进行降序排列

经过借鉴修改后代码如下:代码中加入一定注释

 1 package com.example.shea.goldenpoint2rd;
 2 import java.io.BufferedReader;  
 3 import java.io.FileReader;  
 4 import java.util.ArrayList;  
 5 import java.util.Collections;  
 6 import java.util.Comparator;  
 7 import java.util.List;  
 8 import java.util.Map;  
 9 import java.util.Map.Entry;  
10 import java.util.TreeMap;    
11 // 实现从文件中读入英文文章,统计单词个数,并对于结果进行排序处理
12 public class Wordstatistics {  
13   
14     public static void main(String[] args) throws Exception {  
15           
16         BufferedReader br = new BufferedReader(new FileReader("F:\\hhh\\1.txt"));  //读取文件路径
17         List<String> lists = new ArrayList<String>();  //存储过滤后单词的列表  
18         String readLine = null;
19         while((readLine = br.readLine()) != null){  
20             String[] wordsArr1 = readLine.split("[^a-zA-Z]");  //过滤出只含有字母的  
21             for (String word : wordsArr1) {  
22                 if(word.length() != 0){  //去除长度为0的行  
23                     lists.add(word);  
24                 }  
25             }  
26         }  
27           
28         br.close();  
29           
30         Map<String, Integer> wordsCount = new TreeMap<String,Integer>();  //存储单词计数信息,key值为单词,value为单词数       
31           
32         //单词的词频统计  
33         for (String li : lists) {  
34             if(wordsCount.get(li) != null){  
35                 wordsCount.put(li,wordsCount.get(li) + 1);  
36             }else{  
37                 wordsCount.put(li,1);  
38             }  
39   
40         }  
41           
42         SortMap(wordsCount);    //按值进行排序  
43       
44     }  
45       
46     //按value的大小进行排序  
47     public static void SortMap(Map<String,Integer> oldmap){  
48           
49         ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());  
50           
51         Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){  
52             public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
53                 return o2.getValue() - o1.getValue();  //降序排列  
54             }  
55         });  
56           
57         for(int i = 0; i<list.size(); i++){  
58             System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());  
59         }     
60     }  
61   
62 }

文本文档图片:

第一次实训_结对编程

 

结果截图:

第一次实训_结对编程

 


小结感受:

  对于编程而言,我认为最重要的是思路。而学习氛围对于编程也是有一定的影响的,两个人在一起更容易专注,最初我听见的是“结队”,看到时原来是结对编程。两个人使用同一个鼠标,键盘,电脑可以让两个人更加集中在一起,去解决同一个问题。首先,结对编程需要一个人作为驾驶员来进行代码的录入,另一个人作为领航员对于程序进行分析,找出错误所在。两个人在一起解决同一个问题可以提高效率,并且可以高度集中精力去思考,结对编程是有益处的,但是对于编程思路不明确,要进行结对编程前需要进行前期的准备工作,例如百度搜索词频统计的思路算法,借鉴了网上他人的程序框图,代码以及注释渐渐明白了思路。才能更高效的进行结对编程,所以结对编程是有一定的作用以及帮助的,但是我发现我们的能力还是有限的,需要进行前期的准备工作,例如百度算法,以及实现算法的代码是什么,所以过度的依赖了百度,使得我们思考变少了,总的来说结对编程是有一定的效果经过讨论然后思考解决问题,但是我们的个人能力还是有很大的欠缺的,需要提高,这就是我的体会和感受。


 李爽一个“汉堡包

  dear李爽,通过这一次的结对合作,可以看出来我们团队意识有所增强,面对一个问题首先进行分工合作,共享资源, 互相提出自己的想法,找出我们的共同点不同点寻找问题解决的方法。和其他同学之间互相帮助一起努力解决问题。

那么让我来总结一下你的优点吧~

1.认真,对于时间有一个良好的分配

2.虚心请教,不明白的地方会请教

and 缺点~

对于知识掌握不够熟练

so~建议

平常遇到问题先要自己思考,多多练习~

送给我们两个人共同的一句话

不是所有的问题是百度都能解决的!!!

总而言之呢,在这次结对编程中我们都有了进步,谢谢我的队友,辛苦啦~~~~