由于上个版本问题多多,而且测试情况略有呵呵,于是想想还是默默的改进了一个版本。
- input类
首先呢,是作为输入项的实体类input。
对比之前的版本,新版本(姑且称其为edition2)加强了operation对input中属性的依赖。
同时,算是理清了operation类中的思路(至少个人感觉是比上一个版本更容易看懂),尤其是在对参数的操作和处理方面。
1 package com.Phantom; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 import java.util.Map.Entry; 8 9 public class inputs { 10 public int times; 11 public String words; 12 EntryComparator eCompara=new EntryComparator(); 13 Map<String, Integer>map=new HashMap<String, Integer>(); 14 List<Entry<String, Integer>>list=new ArrayList<Map.Entry<String,Integer>>(); 15 16 public int getTimes() { 17 return times; 18 } 19 20 public String getWords() { 21 return words; 22 } 23 24 public void setWords(String words) { 25 this.words = words; 26 } 27 28 public inputs() { 29 } 30 }
- operation类
operation类中优化了功能,主要解决了以下几个问题:
- 当只输入空格、tab或者什么都不输直接在控制台回车被识别为单词的情况
- 当首字符输入空格、tab的被识别单词的情况
- 在输入字符串过程中单词间输入多个空格的情况
- 单词输入间输入tab导致相邻单词通过tab链接作为一个单词识别的情况
- ......(可能还有其他的,不过都是对于tab、空格之类的问题)
1 package com.Phantom; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Comparator; 6 import java.util.List; 7 import java.util.Map.Entry; 8 import java.util.Scanner; 9 import java.util.Set; 10 11 12 public class operation { 13 inputs i=new inputs(); 14 public String entery(String word){ 15 //Scanner in=new Scanner(System.in); 16 //i.setWords(words); 17 i.setWords(word); 18 /*(1) 19 * .trim删除输入时句首和句尾空格 20 * 但是无法处理只输入空格、tab或者什么都不输入的情况 21 * (当只输入空格或者tab时将其转换为什么都不输入情况处理) 22 * */ 23 //String[] items = i.words.trim().split("\s+|[ ]");//(1) 24 String[] items=word.trim().split("\s+|[ ]"); 25 26 for(String s:items){ 27 if(i.map.containsKey(s)){ 28 i.map.put(s, i.map.get(s)+1); 29 } 30 else{ 31 i.map.put(s, 1); 32 } 33 } 34 for(Entry<String, Integer>entry:i.map.entrySet()){ 35 /*(2) 36 * 用于处理(1)中无法处理的情况 37 * 由于(1)的转换将只输入空格或者tab转换为什么都不输入(即控制台下直接回车)的情况,判断键值对是否为空 38 * */ 39 if(entry.getKey().isEmpty()){//(2) 40 System.out.println("什么单词都没有输入"); 41 break; 42 } 43 else{ 44 i.list.add(entry); 45 } 46 } 47 Collections.sort(i.list, i.eCompara); 48 /*(3) 49 * 输出(1)(2)情况时的处理结果 50 * */ 51 if(i.list.isEmpty()){//(3) 52 System.out.println("null"+" "+"null"); 53 } 54 System.out.println("单词"+" "+"频率"); 55 for (Entry<String, Integer> obj : i.list) { 56 i.times=obj.getValue(); 57 System.out.println(obj.getKey() + " " + i.getTimes()); 58 59 } 60 i.list.clear(); 61 i.map.clear(); 62 return null; 63 } 64 65 }
- EntryComparator类
好吧,这个排序的倒是没怎么动,主要就是把声明集成到input类里面去了。
1 /** 2 * 3 */ 4 package com.Phantom; 5 6 import java.util.Comparator; 7 import java.util.Map.Entry; 8 9 class EntryComparator implements Comparator<Entry<String, Integer>> { 10 11 public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { 12 return o1.getValue() > o2.getValue() ? -1 : 0; 13 } 14 15 }
- 测试类TestingOperation
这个版本最大的改动就是测试类了,在放弃了断言之后,整个项目的覆盖率终于到达了可喜可贺的100%
1 package com.Phantom; 2 3 import static org.junit.Assert.*; 4 5 import java.util.Collections; 6 7 import junit.framework.TestCase; 8 9 import org.junit.After; 10 import org.junit.Before; 11 import org.junit.Test; 12 13 public class TestingOperation extends TestCase{ 14 private operation o1; 15 private inputs i1; 16 17 @Before 18 public void setUp() throws Exception { 19 o1=new operation(); 20 i1=new inputs(); 21 } 22 @After 23 protected void tearDown() throws Exception { 24 // TODO Auto-generated method stub 25 super.tearDown(); 26 } 27 @Test 28 public void testOperation() { 29 30 /* 31 * 只输入空格 32 * */ 33 System.out.println("只输入空格>>>"); 34 i1.setWords(" "); 35 o1.entery(i1.getWords()); 36 System.out.println(" "+"输入为:"+i1.getWords()); 37 System.out.println("--------------------------------------------"); 38 39 /* 40 * 只输入tab 41 * */ 42 System.out.println("只输入tab>>>"); 43 i1.setWords(" "); 44 o1.entery(i1.getWords()); 45 System.out.println(" "+"输入为:"+i1.getWords()); 46 System.out.println("--------------------------------------------"); 47 48 /* 49 * 什么都不输入(控制台下直接回车) 50 * */ 51 System.out.println("什么都不输入(控制台下直接回车)>>>"); 52 i1.setWords(""); 53 o1.entery(i1.getWords()); 54 System.out.println(i1.getWords()); 55 System.out.println(" "+"输入为:"+i1.getWords()); 56 System.out.println("--------------------------------------------"); 57 58 /* 59 * 开头为空格 60 * */ 61 System.out.println("开头为空格>>>"); 62 i1.setWords(" a a a s s d"); 63 o1.entery(i1.getWords()); 64 System.out.println(" "+"输入为:"+i1.getWords()); 65 System.out.println("--------------------------------------------"); 66 67 /* 68 * 开头为tab 69 * */ 70 System.out.println("开头为tab>>>"); 71 i1.setWords(" a a a s s d"); 72 o1.entery(i1.getWords()); 73 System.out.println(" "+"输入为:"+i1.getWords()); 74 System.out.println("--------------------------------------------"); 75 76 /* 77 * 中间多空格 78 * */ 79 System.out.println("中间多空格>>>"); 80 i1.setWords("a a a s s d"); 81 o1.entery(i1.getWords()); 82 System.out.println(" "+"输入为:"+i1.getWords()); 83 System.out.println("--------------------------------------------"); 84 85 /* 86 * 中间tab 87 * */ 88 System.out.println("中间多tab>>>"); 89 i1.setWords("a a a s s d"); 90 o1.entery(i1.getWords()); 91 System.out.println(" "+"输入为:"+i1.getWords()); 92 System.out.println("--------------------------------------------"); 93 94 /* 95 * 末尾多空格 96 * */ 97 System.out.println("末尾多空格>>>"); 98 i1.setWords("a a a s s d "); 99 o1.entery(i1.getWords()); 100 System.out.println(" "+"输入为:"+i1.getWords()); 101 System.out.println("--------------------------------------------"); 102 103 /* 104 * 末尾多tab 105 * */ 106 System.out.println("末尾多tab>>>"); 107 i1.setWords("a a a s s d "); 108 o1.entery(i1.getWords()); 109 System.out.println(" "+"输入为:"+i1.getWords()); 110 System.out.println("--------------------------------------------"); 111 112 /* 113 * 混合 114 * */ 115 System.out.println("混合>>>"); 116 i1.setWords(" a a a s s d "); 117 o1.entery(i1.getWords()); 118 System.out.println(" "+"输入为:"+i1.getWords()); 119 System.out.println("--------------------------------------------"); 120 121 /* 122 * 正常 123 * */ 124 System.out.println("正常>>>"); 125 i1.setWords("a a a s s d"); 126 o1.entery(i1.getWords()); 127 System.out.println(" "+"输入为:"+i1.getWords()); 128 System.out.println("--------------------------------------------"); 129 130 /* 131 * 正常 132 * */ 133 System.out.println("正常>>>"); 134 i1.setWords("a s s s d"); 135 o1.entery(i1.getWords()); 136 System.out.println(" "+"输入为:"+i1.getWords()); 137 System.out.println("--------------------------------------------"); 138 139 } 140 }
junit
运行结果
覆盖率(改变测试方法后终于达到可喜可贺的100%了啊哈哈)
---------------------------------------------------------------------------------------
---------------------------------------The-End---------------------------------------
---------------------------------------------------------------------------------------