代碼規(guī)范 : 表驅(qū)動法(遠離if switch)

表驅(qū)動法的準則

使用表驅(qū)動法的關(guān)注的兩個核心問題:

  • 1 怎樣從表中查詢條目的問題;
  • 2 應(yīng)該在表里面存什么
    兩個核心問題都談到了表,那么這個’表‘是什么東西呢?
    用過hash(哈希)的同學知道, 其內(nèi)部是維護一個存放地址的表格,通過hash去快速得到,那么同樣我們用來存放東西就可以描述成一個表

直接訪問表

  • 例子一: 將數(shù)組作為表
// 下面原先的方法,是一個長長的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 的 每一個分支加一 復(fù)雜度, 上述的復(fù)雜度是 7

// 使用表驅(qū)動
// 使用一個數(shù)組去存入一周的日期
String [] weekday = new String[]{"周日","周一","周二","周三",
    "周四","周五","周六"};
String today = weekday [ dayForMonth % 7 ];

瞬間清爽了很多梢为。

直接訪問表 方式二

  • 例子二 : 用二維的數(shù)組去存放一個結(jié)果集
// 原來的代碼
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 ;     
}

// 轉(zhuǎn)換為 ( 這里 是 三維 的結(jié)果轉(zhuǎn)成二維 去存放)
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作為表,那么首先要構(gòu)建 hash的 key - value
// 存入 hashMap結(jié)構(gòu) key 是 weekday ,value 是 doSomething
String [] weekday = new String[]{"周日","周一","周二","周三",
    "周四","周五","周六"};
String [] doSomething = new String[]{"出游","開會","上班","學習",
    "運動","加班","休息","娛樂"}

// 構(gòu)建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 ]));
}

階梯訪問表

  • 例子四: 用兩個數(shù)組
    0-59 分是不及格 F級
    60- 79 是及格 E級
    80-84 是普通 D級
    85-89 是良好 C級
    90 - 94 是優(yōu)秀 B級
    95-100 是太棒了 A級
    最重要的是, 我的表里面是存放了 區(qū)間的上界 , 用來區(qū)分等級
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];
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市裳朋,隨后出現(xiàn)的幾起案子跺撼,更是在濱河造成了極大的恐慌窟感,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歉井,死亡現(xiàn)場離奇詭異柿祈,居然都是意外死亡,警方通過查閱死者的電腦和手機哩至,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門躏嚎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菩貌,你說我怎么就攤上這事卢佣。” “怎么了菜谣?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵珠漂,是天一觀的道長晚缩。 經(jīng)常有香客問我尾膊,道長,這世上最難降的妖魔是什么荞彼? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任冈敛,我火速辦了婚禮,結(jié)果婚禮上鸣皂,老公的妹妹穿的比我還像新娘抓谴。我一直安慰自己暮蹂,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布癌压。 她就那樣靜靜地躺著仰泻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滩届。 梳的紋絲不亂的頭發(fā)上集侯,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音帜消,去河邊找鬼棠枉。 笑死,一個胖子當著我的面吹牛泡挺,可吹牛的內(nèi)容都是我干的辈讶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼娄猫,長吁一口氣:“原來是場噩夢啊……” “哼贱除!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起媳溺,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤勘伺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后褂删,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飞醉,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年屯阀,在試婚紗的時候發(fā)現(xiàn)自己被綠了缅帘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡难衰,死狀恐怖钦无,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盖袭,我是刑警寧澤失暂,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站鳄虱,受9級特大地震影響弟塞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拙已,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一决记、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倍踪,春花似錦系宫、人聲如沸索昂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椒惨。三九已至,卻和暖如春潮罪,著一層夾襖步出監(jiān)牢的瞬間框产,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工错洁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秉宿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓屯碴,卻偏偏與公主長得像描睦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子导而,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359