由于上个版本问题多多,而且测试情况略有呵呵,于是想想还是默默的改进了一个版本。

  • input类

首先呢,是作为输入项的实体类input。

对比之前的版本,新版本(姑且称其为edition2)加强了operation对input中属性的依赖。

同时,算是理清了operation类中的思路(至少个人感觉是比上一个版本更容易看懂),尤其是在对参数的操作和处理方面。

 package com.Phantom;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; public class inputs {
public int times;
public String words;
EntryComparator eCompara=new EntryComparator();
Map<String, Integer>map=new HashMap<String, Integer>();
List<Entry<String, Integer>>list=new ArrayList<Map.Entry<String,Integer>>(); public int getTimes() {
return times;
} public String getWords() {
return words;
} public void setWords(String words) {
this.words = words;
} public inputs() {
}
}
  • operation类

    operation类中优化了功能,主要解决了以下几个问题:

    1. 当只输入空格、tab或者什么都不输直接在控制台回车被识别为单词的情况
    2. 当首字符输入空格、tab的被识别单词的情况
    3. 在输入字符串过程中单词间输入多个空格的情况
    4. 单词输入间输入tab导致相邻单词通过tab链接作为一个单词识别的情况
    5. ......(可能还有其他的,不过都是对于tab、空格之类的问题)
 package com.Phantom;

 import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set; public class operation {
inputs i=new inputs();
public String entery(String word){
//Scanner in=new Scanner(System.in);
//i.setWords(words);
i.setWords(word);
/*(1)
* .trim删除输入时句首和句尾空格
* 但是无法处理只输入空格、tab或者什么都不输入的情况
* (当只输入空格或者tab时将其转换为什么都不输入情况处理)
* */
//String[] items = i.words.trim().split("\\s+|[ ]");//(1)
String[] items=word.trim().split("\\s+|[ ]"); for(String s:items){
if(i.map.containsKey(s)){
i.map.put(s, i.map.get(s)+1);
}
else{
i.map.put(s, 1);
}
}
for(Entry<String, Integer>entry:i.map.entrySet()){
/*(2)
* 用于处理(1)中无法处理的情况
* 由于(1)的转换将只输入空格或者tab转换为什么都不输入(即控制台下直接回车)的情况,判断键值对是否为空
* */
if(entry.getKey().isEmpty()){//(2)
System.out.println("什么单词都没有输入");
break;
}
else{
i.list.add(entry);
}
}
Collections.sort(i.list, i.eCompara);
/*(3)
* 输出(1)(2)情况时的处理结果
* */
if(i.list.isEmpty()){//(3)
System.out.println("null"+"\t\t"+"null");
}
System.out.println("单词"+"\t\t"+"频率");
for (Entry<String, Integer> obj : i.list) {
i.times=obj.getValue();
System.out.println(obj.getKey() + "\t\t" + i.getTimes()); }
i.list.clear();
i.map.clear();
return null;
} }
  • EntryComparator类

    好吧,这个排序的倒是没怎么动,主要就是把声明集成到input类里面去了。

 /**
*
*/
package com.Phantom; import java.util.Comparator;
import java.util.Map.Entry; class EntryComparator implements Comparator<Entry<String, Integer>> { public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o1.getValue() > o2.getValue() ? -1 : 0;
} }

 

  • 测试类TestingOperation

    这个版本最大的改动就是测试类了,在放弃了断言之后,整个项目的覆盖率终于到达了可喜可贺的100%

 package com.Phantom;

 import static org.junit.Assert.*;

 import java.util.Collections;

 import junit.framework.TestCase;

 import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class TestingOperation extends TestCase{
private operation o1;
private inputs i1; @Before
public void setUp() throws Exception {
o1=new operation();
i1=new inputs();
}
@After
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
}
@Test
public void testOperation() { /*
* 只输入空格
* */
System.out.println("只输入空格>>>");
i1.setWords(" ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 只输入tab
* */
System.out.println("只输入tab>>>");
i1.setWords(" ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 什么都不输入(控制台下直接回车)
* */
System.out.println("什么都不输入(控制台下直接回车)>>>");
i1.setWords("");
o1.entery(i1.getWords());
System.out.println(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 开头为空格
* */
System.out.println("开头为空格>>>");
i1.setWords(" a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 开头为tab
* */
System.out.println("开头为tab>>>");
i1.setWords(" a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 中间多空格
* */
System.out.println("中间多空格>>>");
i1.setWords("a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 中间tab
* */
System.out.println("中间多tab>>>");
i1.setWords("a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 末尾多空格
* */
System.out.println("末尾多空格>>>");
i1.setWords("a a a s s d ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 末尾多tab
* */
System.out.println("末尾多tab>>>");
i1.setWords("a a a s s d ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 混合
* */
System.out.println("混合>>>");
i1.setWords(" a a a s s d ");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 正常
* */
System.out.println("正常>>>");
i1.setWords("a a a s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); /*
* 正常
* */
System.out.println("正常>>>");
i1.setWords("a s s s d");
o1.entery(i1.getWords());
System.out.println("\n"+"输入为:"+i1.getWords());
System.out.println("--------------------------------------------"); }
}

junit

运行结果

覆盖率(改变测试方法后终于达到可喜可贺的100%了啊哈哈)

---------------------------------------------------------------------------------------

---------------------------------------The-End---------------------------------------

---------------------------------------------------------------------------------------

software_testing_work2_question1(改)_edition的更多相关文章

  1. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  2. Linux.NET实战手记—自己动手改泥鳅(上)

    各位读者大家好,不知各位读者有否阅读在下的前一个系列<Linux.NET 学习手记>,在前一个系列中,我们从Linux中Mono的编译安装开始,到Jexus服务器的介绍,以及如何在Linu ...

  3. Linux.NET实战手记—自己动手改泥鳅(下)

    在上回合中,我们不痛不痒的把小泥鳅的数据库从只能供在Windows下运行的Access数据库改为支持跨平台的MYSQL数据库,毫无营养的修改,本回合中,我们将把我们修改后得来的项目往Linux中部署. ...

  4. Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  5. 把PDF的底色改成护眼色,这样读起文章来就不是很累了······

    PDF格式背景改变方法如下: 打开PDF 点击 编辑 ->首选项->辅助工具->选中"替换文档颜色"和" 自定义颜色"->将背景颜色改成 ...

  6. 3.EF 6.0 Code-First实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...

  7. 4.在MVC中使用仓储模式进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...

  8. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  9. EF里单个实体的增查改删以及主从表关联数据的各种增删 改查

    本文目录 EF对单个实体的增查改删 增加单个实体 查询单个实体 修改单个实体 删除单个实体 EF里主从表关联数据的各种增删改查 增加(增加从表数据.增加主从表数据) 查询(根据主表找从表数据.根据从表 ...

随机推荐

  1. 设计模式学习笔记-Adapter模式

    Adapter模式,就是适配器模式,使两个原本没有关联的类结合一起使用. 平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类 ...

  2. MySQL ERROR 1005: Can't create table (errno: 150)的错误解决办法

    在mysql 中建立引用约束的时候会出现MySQL ERROR 1005: Can't create table (errno: 150)的错误信息结果是不能建立 引用约束. 出现问题的大致情况 1. ...

  3. html/css小练习3

    效果图:

  4. 跟小静读《jQuery权威指南》——目录

    前言 2014年开始了,年底给自己制订的学习计划,第一步先从学习<jQuery权威指南>开始. jQuery大家都很比较熟悉,但是我经常是边用的时候边对照着API,这次找本书通读一遍,记录 ...

  5. discuz后台登陆 口令卡添加

    1.通过根目录文件admin.php 找到 $admincp->init(); 2.指向  dz/source/class/discuz/discuz_admincp.php 这个方法funct ...

  6. Java,Android 项目导入Eclipse常见错误

    一.导入的jar包不存在: 右键工程属性查看: 导入的第三方jar包不存在: 解决方法: 删除该jar包,得到该jar包并存至本地,再导入该jar包 二.中文字符乱码: 解决方法: 右键项目属性: 修 ...

  7. 微信JS SDK Demo 官方案例[转]

    摘要: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用 ...

  8. bzoj 3993: [SDOI2015]星际战争

    #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #def ...

  9. 《数据结构》2.2顺序表(sequence list)

    //顺序表节点的定义 typedef struct { datatype data[MAXSIZE]; //数组容量的上限 int len; //记录最后一个元素的位置,相当于一个指针,表空时len= ...

  10. 使用Crowd2.7集成Confluence5.3与JIRA6.1,并安装、破解及汉化,实现单点登录【原创】

      鉴于目前没有针对Crowd.Confluence.Jira安装.集成和破解最新的方法,总结今天安装.破解及集成的经验,编写此文,方便大家进行配置也方便自己以后参考.此文参考多篇破解文章,并经过作者 ...