标签:
目前在学习软件构造课程中表驱动法的内容,了解后觉得它在处理涉及多个if-else问题时十分有用,下面提供一些简单的我对表驱动法的理解以及其在java中应用的小例子。
表驱动法,顾名思义,是用查表方式来获取数据,涉及到了表的结构。表是一种在很多语言中常见的数据结构,比如在java中我们使用map键值对集合的形式来定义表。关于java中map的用法如下:
创建: Type map = new HashMap(); 删除: map.clear(); 添加键值对: map.set(key,value); 取出谋键对应的值: map.get(key) 循环遍历取出所有键值对: for(Object obj : map.keySet()){ map.get(obj ); }
表驱动法查找方式包括直接访问,索引访问与阶梯访问。
直接访问的方式是通过下标直接找到对应的数据内容,这种方式一般只需要使用数组这种数据结构。举个简单的例子如下:
static String []week = {"星期一","星期二","星期三","星期四","星期五","星期六","星期七"}; int daytime = 3; String dayName = week[daytime--]; System.out.print(dayName);
//dayName = "星期三";
索引访问的方式适用于我们日常生活查找简单的表的情景,查找的条件不直观。比如我们要通过程序模拟一本汉语字典,查找拼音为"hao"的汉字,拼音"hao"是字符串,没有字典页码的数字形式直观,无法作为数组下标,在java中这时使用map比较合适,将拼音作为键,值为对应的汉字等等。下面是另一个简单的例子:
static String []week = {"星期一","星期二","星期三","星期四","星期五","星期六","星期七"}; static String []plan = {"学习课程","练习棒球","钢琴演奏","户外写生","与家人野餐","外出购物","整理房间"}; static Map<String,String> dayplan = new HashMap(); for(int i =0;i<week.length;i++){ dayplan.put(week[i],plan[i]); } String Wednesdayplan =dayplan.get("星期三"); System.out.print(Wednesdayplan); //Wednesdayplan = "钢琴演奏"
最后是阶梯访问,也称为分段访问,是通过对某表中数据分段,根据分段上限再进行查找的过程。应用在我们日常生活中比较常见的是绩点查询。比如你某门课分数为82,你想查询这门课考试成绩的GPA,你将会在两张表中查询。首先你需要再一张绩点对应分数上限的表中查找最接近你分数的分数上限:84,然后通过上限85分查找到对应的绩点为3.3。以下为源代码:
static int []Range = {59,64,74,84,89,100}; static Double []GPA = {0.,1.,2.,3.3,3.7,4.}; double gpa = 0; int grades = 82; for(int i=0;i<Range.length;i++){ if(grades<=Range[i]){ gpa = GPA[i]; break; } } system.out.print(gpa); //gpa = 3.3
That‘s all~Thank you!
标签:
原文地址:http://www.cnblogs.com/code-june/p/5062154.html