代码规范 : 表驱动法(if switch 真讨厌)
来源:互联网 发布:计算机编程是什么 编辑:程序博客网 时间:2024/06/07 16:10
本文整理自代码大全和网上的一些代码,出处忘记了, 侵删
表驱动法的准则
使用表驱动法的关注的两个核心问题:
1 怎样从表中查询条目的问题;
2 应该在表里面存什么
两个核心问题都谈到了表,那么这个’表‘是什么东西呢?
用过hash(哈希)的同学知道, 其内部是维护一个 存放地址的表格,通过hash去快速得到,那么同样我们用来存放东西就可以描述成一个表
直接访问表
例子一: 将数组作为表
// 下面原先的方法,是一个长长的swtich语句String today = "周日";Switch( dayForMonth % 7 ){ case 0 : today = "周日"; case 1 : today = "周一"; case 2 : today = "周二"; case 3 : today = "周三"; case 4 : today = "周四"; case 5 : today = "周五"; default: today = "周六"; }
按照书上所说 , 要为switch 的 每一个分支加一 复杂度, 上述的复杂度是 7
// 使用表驱动// 使用一个数组去存入一周的日期String [] weekday = new String[]{"周日","周一","周二","周三", "周四","周五","周六"};String today = weekday [ dayForMonth % 7 ];
是不是复杂度瞬间降低了
直接访问表 方式二
例子二 : 用二维的数组去存放一个结果集
// 原来的代码if( (a && !c ) || (a && b && c)){ category = 1 ; }else if( (b && ! a) || (a && c && !b)){ category = 2 ; }else if ( c && !a && !b){ category = 3 ; }else { category = 0 ; }// 转换为 ( 这里 是 三维 的结果转成二维 去存放)static int categoryTable[2][2]={ //!b!c !bc b!c bc 0, 3, 2, 2, // !a 1, 2, 1, 1, // a}// 使用category = categoryTable[1][0];
索引访问表
例子三: 将hashMap作为表,那么首先要构建 hash的 key - value
// 存入 hashMap结构 key 是 weekday ,value 是 doSomethingString [] weekday = new String[]{"周日","周一","周二","周三", "周四","周五","周六"};String [] doSomething = new String[]{"出游","开会","上班","学习", "运动","加班","休息","娱乐"}// 构建hash 的键值对 Map<String,Object> map = new HashMap();for(int i = 0; i < weekday.length; i++){ map.put( weekday[i],doSomething[i] );}// 取出hash 的值public static String doWhat (String today){ return map.get(today);}public static void main (String arge[]){ system.out.pringf(doWhat(weekday[ dayForMonth % 7 ]));}
阶梯访问表
例子四: 用两个数组
0-59 分是不及格 F级
60- 79 是及格 E级
80-84 是普通 D级
85-89 是良好 C级
90 - 94 是优秀 B级
95-100 是太棒了 A级
最重要的是, 我的表里面是存放了 区间的上界 , 用来区分等级
int [] grade = {59,79,84,89,94,100}; String [] level = {"F","E","D","C","B","A"},public String getLevel (int grade){ for( int i = 0 ; i < grade.length ; i++){ if(grade <= grade[i]){ return level[i]; } }}
(加餐)方法访问表
虽然感觉没什么多大的实际应用, 这里只是描述可以通过java的反射机制去构建表
public Class Wine{ public void setCountry(Stinrg info){ ..... } public void setType(Stinrg info){ ..... }}Map<String,Object> map = new HashMap<>();map.put("所属国家","setCountry");map.put("葡萄酒类型","setType");public String findMethodByKey(String info){ return map.get(info);}public String setChinese(String method,String value){ Wine thyWine = new Wine(); String mothodName = findMethodByKey("所属国家"); Method method = thyWine.getClass.getMethod( name, Wine.class); method.invoke(tblwine,value);}public static void mian(String [] arge){ setChinese("所属国家","中国");}
阅读全文
0 0
- 代码规范 : 表驱动法(if switch 真讨厌)
- 建议149:使用表驱动法避免过长的if和switch分支
- 多分支if和switch的简化方法:表驱动
- 表驱动初步接触之Map代替if/switch
- 表驱动--用于在复杂消息分发中,取代if/else和switch/case结构
- if、switch
- 过节真讨厌!!!
- iOS 代码规范~判断if书写方式
- 选择语句switch和if else的区别以及代码
- 微软的广告真讨厌
- java 编程规范 数据类型 运算符 分支判断if switch等初识
- 讨厌的代码
- if and switch
- if与switch
- if和switch语句
- if与switch转换
- switch 与 if/else
- if switch判断结构
- CCF大数据专家委:《2018年大数据发展趋势预测》(PPT全文)
- 正则表达式太慢?这里有一个提速100倍的方案(附代码)
- 浅谈HTTP协议
- WOS(Web of Science)检索规则
- java中构造器(Constructor)
- 代码规范 : 表驱动法(if switch 真讨厌)
- 在TextView中显示Html格式的文字/图片/超链接
- Laravel如何引用第三方(自定义)库
- JTable不显示的问题
- MyEclipse 2016 破解详细过程
- 42. Trapping Rain Water
- 计算机网络二进制反码求和校验算法
- mongoose实例
- caffe的solverstate的使用