1. 程式人生 > >軟工16作業2

軟工16作業2

oid ids 大寫字母 過程 repo col 索引排序 根據 and

作業1

Task1:碼雲項目地址

地址:https://gitee.com/LinDaDaDa/201621123012

Task2:PSP表格

PSP2.1 個人開發流程 預估耗費時間(分鐘) 實際耗費時間(分鐘)
Planning 計劃 20 30
Estimate 明確需求和其他相關因素,估計每個階段的時間成本 15 25
Development 開發 200 250
Analysis 需求分析 (包括學習新技術) 30 40
Design Spec 生成設計文檔 10 20
Design Review 設計復審 20 40
Coding Standard 代碼規範 40 30
Design 具體設計 20 40
Coding 具體編碼 30 40
Code Review 代碼復審 20 50
Test 測試(自我測試,修改代碼,提交修改) 40 30
Reporting 報告 20 40
測試報告 15 25
計算工作量 15 30
並提出過程改進計劃 50 30

Task3:解題思路描述

  • 1.首先看到此次要求時便得知了需要動用到文件的讀取,此時我就選擇自己較為擅長的java
  • 2.由於輸出都是需要小寫的,所以我先把文件中的大寫字符轉換成小寫if(Character.isUpperCase(line.charAt(i))) Character.toLowerCase(line.charAt(i));;
  • 3.統計字符數的話就每行統計一次最後相加起來就是總字符數
    1. 然後根據頻率的話肯定得用到索引排序MAP肯定最為合適

Task4:設計實現和關鍵代碼

1.大寫字符變小寫和統計字符數

                for(int i=0;i<=line.length()-1;i++)
                {
                    if(Character.isUpperCase(line.charAt(i))) //對大寫字母的判斷
                        Character.toLowerCase(line.charAt(i));
                    
                    
                    
                }
                wordcount+=line.length();//字符數統計
                linecount ++;//行數統計

2.有效單詞數(運用的是正則表達式)

 for(String words:text)
            {
                String[] word = words.split("[^a-zA-Z0-9]"); 
                
                for(String pp:word)
                {
                     String regex ="^[a-z]{4}[a-z0-9]*$";
                     if(pp.matches(regex)==true){
                         text2.add(pp);
                     }
                }
            }
          return text2.size();

3.頻率最高的10個單詞(方法中返回的也是map)

 Map<String, Integer> map = new TreeMap<String, Integer>();
            for(String word:text2)
             {if(map.get(word) != null){ 
                    map.put(word,map.get(word) + 1);  
                }else{  
                    map.put(word,1);  
                }  
      
             }//統計
            
             List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(  
                     map.entrySet());  
             List<Map.Entry<String, Integer>> infoIds1 = 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());  
                 }  
             });  //比較器
             System.out.println("--------------排序後--------------");  
             for (int i = 0; i < infoIds.size(); i++) {  
                 Entry<String,Integer> ent=infoIds.get(i);  
                 if(i<=9){
                     infoIds1.add(ent);
                 System.out.println(ent.getKey()+":"+ent.getValue());
                 }
               
    }
            return infoIds1;

Task5:代碼測試截圖

技術分享圖片

Task6:單元測試

技術分享圖片

    @Test
    public void testWordnumber() {
        assertEquals(0, jiekou.wordnumber("C:/Users/Administrator/Desktop/c1.txt"));//空文件
        assertEquals(14, jiekou.wordnumber("C:/Users/Administrator/Desktop/c2.txt"));//14個單詞的純英文
        assertEquals(160, jiekou.wordnumber("C:/Users/Administrator/Desktop/c3.txt"));//160個單詞的英文數字混合
    }
   

Task7:git提交代碼

技術分享圖片

技術分享圖片

Task8:效能分析

技術分享圖片

Task9:心得體會

初步了解了對java代碼進行測試,剛開始由於geichars有大小限定導致大文件出錯,就改用了charAT。之前寫代碼只註重於功能實現,現在發現了還有效率上的優化,對軟件工程有了新一步的認識。

軟工16作業2