第十六章 邏輯怪和選擇狂(下)
「哈哈,這倒霉孩子,不僅他要遭,怕是還要連累很多人哦?!?p> 想到老爹描述的畫面,我不禁樂了。這倒霉孩子拉仇恨的速度恐怕只有善意提醒老師忘了布置家庭作業(yè)能與之匹敵了。
「不錯,老師聽了頓時火冒三丈,于是讓90分以下的同學(xué)做錯了的題抄5遍。這個時候用if表達如下:
if(分?jǐn)?shù)大于90分并且不等于100分)
{
把錯題抄三遍
}
else
{
把錯題抄五遍
}」
「嘻嘻,這下那個倒霉孩子知道89分和99分的差距在哪兒了?!?p> 「是啊,就在那個小朋友被數(shù)十雙透露出殺氣的眼睛看著時,他痛定思痛,決下一次一定要多考點分?jǐn)?shù),不然五支筆綁在一起真的不好握。
這時異變又起,因為60分以上的同學(xué)不樂意了。畢竟60分是一道分水嶺,代表著兩個不同的境界??墒乾F(xiàn)在那些不足60分的人跟他們這些60分以上的人居然是相同的待遇,你說這誰能忍?
經(jīng)過這么一說,你們老師也覺得這樣很是不妥,于是讓30分到59分這個階段的小朋友把整張卷子抄三遍。于是乎我們的if表達式就變成了這樣:
if(分?jǐn)?shù)大于90分并且不等于100分)
{
把錯題抄三遍
}
else if(分?jǐn)?shù)大于等于60分)
{
把錯題抄五遍
}
else if(分?jǐn)?shù)大于等于30分)
{
把整張卷子抄三遍
}」
「哈,我好像明白了,if的分身else if是在矮子里邊挑高子,如果有不同的標(biāo)準(zhǔn),就可以一直挑下去。而else分身就是不滿足前邊所有if和else if條件的矮子!」
之前老爹在說分身和魔塔游戲的時候,我的腦袋里面就有一道電光閃過,只不過我一時沒有抓住?,F(xiàn)在經(jīng)過老爹這么一說,我終于明白了。
「嗯,不錯!」
老爹欣慰地笑了,然后接著把抄卷子的例子講完了。
「就在30分以下的同學(xué)覺得自己有驚無險地逃過一劫的時候,老師的一句話讓他們瞬間如遭雷擊。
老師說讓30分以下的同學(xué)明天叫家長來學(xué)校,共同商討學(xué)習(xí)提升方案……所以,這下if結(jié)構(gòu)就變成了:
if(分?jǐn)?shù)大于90分并且不等于100分)
{
把錯題抄三遍
}
else if(分?jǐn)?shù)大于等于60分)
{
把錯題抄五遍
}
else if(分?jǐn)?shù)大于等于30分)
{
把整張卷子抄三遍
}
else
{
請家長
}」
「明白了!那我先把書上的例程做一遍?!?p> 有了老爹的講解,再加上書上的例程,我也就差不多掌握了if分支結(jié)構(gòu)。當(dāng)然,要寫程序還需要把if和else if后面小括號中的條件轉(zhuǎn)換為邏輯表達式。
在休息了十五分鐘后,老爹就開始講解另外一個分支結(jié)構(gòu)――switch。
「那么我們接下來就開始說另外一個混沌先民,switch,依舊先看看它的屬性卡
姓名:switch
身份:混沌先民
出身年月:1972年初
技能:算無遺策」
「咦,這個switch聽起來好像在混沌先民中是個智慧擔(dān)當(dāng)?!?p> 「很相近了!我們先來做個小調(diào)查,在平時生活中,有沒有需要你做選擇,但你又覺得很難作出選擇的情況?比如說你和好朋友中午去食堂吃飯,看著十幾種菜,糾結(jié)半天不知道吃哪幾樣?」
「嗯吶嗯吶,經(jīng)常都有這種感覺!」
我點了點頭。
「這個叫做困難選擇癥,很多人都有這個問題。當(dāng)然了,我們的混沌先民也不例外。
在推動程序世界發(fā)展的過程中,往往有很多事情需要混沌先民作出選擇,但是它們和我們一樣,都有選擇困難癥。這個時候,switch這個家伙就順勢而生了。其他人只需要把選項以及相關(guān)信息告訴它,它能立刻作出最正確的選擇!」
「這么看來,這個switch還挺厲害的呀!」
「有道是一個籬笆三個樁,switch之所以能夠快速果決地做出正確的選擇,還和它的三個小伙伴密不可分,它們分別是:case、default和break?!?p> 「哦哦,這么看來這個switch好像很難的樣子呀!」
我皺著眉頭說道。
「嗯~,說難也不難,說簡單也不簡單。這樣,我們還是以一個具體的例子來說明。用什么例子呢?有了!」
老爹右手握成拳,用手背撞向左手掌,雙眼之中迸射出智慧的光芒。
話音未落,老爹從口袋里把手機掏了出來,不由分說撥通了電信的客服電話10000。
「您好,歡迎致電中國電信,查詢服務(wù)請按1,業(yè)務(wù)咨詢請按2,業(yè)務(wù)辦理請按3,如需其他幫助請按0……」
在幾聲「嘟」之后,手機里頓時傳了電信客服妹子甜美的聲音。
在老爹的慫恿下,我把選項都嘗試了一遍,還和人工客服聊了會兒天。
「吶,switch就和剛剛的客服功能差不多,你輸入相應(yīng)的數(shù)字,switch就能幫你做對應(yīng)的事情,現(xiàn)在我們就用switch來實現(xiàn)一下剛剛客服的功能?!?p> 「哦,原來switch是客服小姐姐啊~」
我若有所思地說道。
「哈,這么說也沒有錯了。好吧,那我就帶你來實現(xiàn)這個客服小姐姐:
switch(按鍵)
{
case 1:
查詢服務(wù)
break;
case 2:
業(yè)務(wù)咨詢
break;
case 3:
業(yè)務(wù)辦理
break;
case 0:
其他幫助
break;
default:
4~9
break;
}」
「case和default我現(xiàn)在知道是什么意思了,那這個break呢?」
「這個是個很重要的知識點,往往有很多初學(xué)者都會忘記寫break,所以在寫了case后,一定要馬上寫break,以免忘記。至于break嘛,它俗稱混沌先民中的終結(jié)者,能耐大了去了。
假設(shè)現(xiàn)在你按下了1,按道理說應(yīng)該是走case 1進行查詢服務(wù),結(jié)果不巧的是你忘了加break,這個時候就會繼續(xù)走case 2。要是case 2也沒有加break,程序就會挨著往下面執(zhí)行,直到遇到break為止。
如果在所有的case和default都沒有break,就會從匹配的case項依次執(zhí)行,直到switch結(jié)束。對了switch中可以有多個case,但只能有一個default!」
「我現(xiàn)在開始理解為什么老爹你說switch是選擇狂了,看來做選擇這種費力的事情還真得交給它來做。但是我有一個疑問?!?p> 「說說看~」
「我發(fā)現(xiàn)剛剛那個客服小姐姐用if也可以實現(xiàn)啊,這么看來if和switch的功能產(chǎn)生了重疊,這樣switch不是可有可無的存在了么?」
「這個問題問得非常好,switch看起來就像是if…else if…else的特例,但是在case比較多的時候,就必須讓if修出比較多的else if分身出來,這樣是比較耗費修為的,而且可讀性也沒有switch好。
總的來說就是,switch的效率更高,可讀性更好,所以在能夠使用switch的時候盡量使用它。
當(dāng)然了,switch也有它自己的缺點,就是給它的關(guān)鍵信息如剛剛例子中的按鍵只能是一個確定的值,不能是范圍?!?