爲了練習軟件的我的開發流程,設計一個關於詞頻統計的小程序,在詞頻統計的小程序中須要實現的功能具體有:git
將已經存在的.txt文件讀入到程序中,將文件讀入時存放在緩衝池中,而且在文件讀入的時候過濾掉文件中的一些標點符號和一些數字,只讀入一些單詞,
在文件讀入過程當中必定注意文件讀入流的使用,文件路徑也選取相對路徑,提升文件讀入的健壯性,在不一樣的環境中也可以成功的讀入文件。經過使用集合的方式將文件的內容讀進以後存放在集合中,這次程序使用的是Map集合,這樣能夠在後面查找單詞的時候能夠經過鍵值對的方式來查找,而且在存放過程當中經過<key,value>的方式存放單詞方便遍歷的時候取值。在存放的時候,將相同的單詞計數,單詞做爲key值,單詞的數量做爲value值存放在集合中。github
在這個功能的設計中須要前面的存放在TreeMap集合裏面的單詞,在用戶在控制檯輸入想要查找的單詞後其實在後臺看到的是一串的字符串,經過指定的標點符號截取,將用戶輸入的字符串存放在String類型的數組裏面,經過equal與以前存放在集合中的單詞比較,在查找到相同的單詞的同時,經過key找到相應的value,而且返回一個單詞的個數給控制檯。算法
將集合中的單詞存放在文件中,此時須要的是文件的寫入功能,經過FileWriter類中的write方法將集合中的數據寫入到文件中,首先須要的是將集合中的數據遍歷出來,經過迭代器的方式遍歷,存放以後回滾。小程序
在用戶查找完單詞以後控制檯顯示的是查找出來的個數,經過繼承JFrame類建立可視化圖像界面,在建立的界面中設計柱狀圖,在柱狀圖的方法中首先要拿到用戶查找的單詞與查找到單詞的個數,在經過Graphics2D方法建立二維的柱狀圖。數組
String line = "src/yll/com/test1/word.txt"; File file = new File(line); InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8"); BufferedReader reader = new BufferedReader(isr); //將文本中的英文詞語放在集合裏面 tm = new TreeMap<String,Integer>(); while((line=reader.readLine())!=null){ line = line.toLowerCase();//忽略大小寫 String[] str = line.split("[^a-zA-Z]");//過濾出只含有字母的 for(int i = 0; i<str.length; i++){ String word = str[i].trim(); if(tm.containsKey(word) && word.length() != 0){ tm.put(word, tm.get(word)+1); }else{ tm.put(word, 1); } } }
//查找單詞以後進行與詞羣裏面查找單詞的個數 public String[] bijiao(TreeMap<String, Integer> tm,String s) {//在這個方法中,須要傳入的是以前存入單詞的集合,用戶輸入的字符串 TreeMap<String,Integer> map1 = new TreeMap<String, Integer>(); String[] word= s.split(";");//經過分號來截取用戶傳入的字符串 int i; for(i=0; i<word.length; i++) { for(Entry<String,Integer> entry : tm.entrySet()) { if(word[i].equals(entry.getKey()))//與集合中的單詞比較 { map1.put(entry.getKey(), entry.getValue()); System.out.println(entry.getKey() + "的個數是" + entry.getValue()); break; } } } return word; }
柱狀圖:
網絡
存入成功的顯示
學習
PSP階段 | 任務內容 | 計劃共完成須要的時間(min) | 實際完成須要的時間(min) |
Planning | 計劃 | 6 | 9 |
Estimate | 估計這個任務須要多少時間,並規劃大體工做步驟 | 8 | 12 |
Development | 開發 | 200 | 340 |
Analysis | 需求分析 (包括學習新技術) | 10 | 30 |
Design Spec | 生成設計文檔 | 20 | 30 |
Design Review | 設計複審 (和同窗審覈設計文檔) | 3 | 5 |
Coding Standard | 代碼規範 (爲目前的開發制定合適的規範) | 10 | 9 |
Design | 具體設計 | 20 | 25 |
Coding | 具體編碼 | 200 | 260 |
Code Review | 代碼複審 | 30 | 40 |
Test | 測試(自我測試,修改代碼,提交修改) | 18 | 40 |
Reporting | 報告 | 18 | 25 |
Test Report | 測試報告 | 5 | 6 |
Size Measurement | 計算工做量 | 2 | 3 |
Postmortem & Process Improvement Plan | 過後總結 ,並提出過程改進計劃 | 10 | 30 |
在這個項目的實現中,主要時間花費在代碼的實現中,開始的時候整個沒有思路,讀了好幾遍老師的要求,理清項目以後思考這個代碼實現所要用到的算法具體會有那些,因爲以前沒有怎麼寫過AWT相關的代碼,本身查找書和網絡瞭解和實現了一下AWT,在柱狀圖的實現中縱座標數值的設置那塊出了不少的錯,主要是縱座標的公式的不理解。
在文件寫入功能中,一直獲取不到集合中的數據,也不報錯,經過Debug 方式一步一步查找問題的所在。測試