點(diǎn)擊查看:2015計(jì)算機(jī)等級考試二級Java入門教程章節(jié)匯總
點(diǎn)擊查看:2015計(jì)算機(jī)等級考試二級Java入門教程第三章匯總
3.3 條件運(yùn)算符 嵌套的if語句
當(dāng)if表達(dá)式為true時(shí),被執(zhí)行的語句可以還是一條if語句,它也可以作為else子句的一條語句。這就使你可以表達(dá)一種錯綜復(fù)雜的邏輯關(guān)系,比如"如果我的銀行有足夠的余額,如果我?guī)е北,就買一輛汽車,要不然如果我可以從銀行獲得貸款,也會買一輛汽車。"一個(gè)嵌套在另一條if語句中的if語句又可以包含一個(gè)嵌套的if語句。可以像此下去多層嵌套,只要你清楚自己在做什么或?qū)Ψ爆、混亂情有獨(dú)鐘。
我們可以對前面例子中的if語句進(jìn)行修改來說明嵌套的if語句,
if (number%2==0) //Test if it is even
(
if (number<50) //Output a message if number is <50
system.out.println(you have got an even number<50,"+number)
)
else
system.out .println (you have got an odd number,"+number);It is odd
這里如果假設(shè)number的值小于50,則顯示一條有偶數(shù)值的信息。
因?yàn)橛衑lse子句,所以必須用一個(gè)大括號將嵌套的if語句括起來。大括號中內(nèi)嵌I}語句意味著,若該語句擁有else子句,必將出現(xiàn)在包含嵌套if語句的大括號中。如果沒有大括號,程序也可以被編譯并運(yùn)行,但邏輯結(jié)構(gòu)卻會發(fā)生變化。讓我們看看是怎么回事。
在嵌套多層if語句后,會產(chǎn)生一個(gè)問題,即一個(gè)特定的else子句屬于哪一個(gè)if語句。如果將上面代碼中的大括號去掉,我們可以得到
if (number%2==0) //Test if it is even
if (number<50) //Output a message if number is <50
system.out.println(you have got an even number<50,"+number)
else
system.out.println(you have got an odd number +number);//It is odd
這種書寫形式與前面的邏輯結(jié)構(gòu)有著本質(zhì)的區(qū)別。這里的else子句屬于被嵌套在內(nèi)的用來測試number值小于50的if語句,所以,第二個(gè)prirttln()調(diào)用僅在偶數(shù)值大于或等于50時(shí)才被執(zhí)行。很顯然,與我們所需要的結(jié)果有差別,因此本例中的輸出結(jié)果是錯誤的,但是它能夠說明將else連接到if的規(guī)則,即:
else子句永遠(yuǎn)屬于前面的距離它最近的、屬同一程序塊的、沒有匹配else子句的if語句。
你一定要認(rèn)真仔細(xì),以確保在嵌套if語句時(shí)的縮進(jìn)格式正確。依照標(biāo)識的縮進(jìn)格式理解邏輯結(jié)構(gòu),很容易讓你采納,但它有可能是完全錯誤的。
讓我們在另一個(gè)程序中試試if-else的應(yīng)用,試試看--一種笨拙的譯碼方式
按如下所示,建立LetterCheck類并編寫main()方法的代碼:
public class LetterCheck
{
public static voif main(string[] args)
{
char symbol="A"
symbol=(char)(128.0*Math.random()); //Generate random character
if (symnol>=A) //Is it A or greator
if system.out.println(you have the capital letter +symnol);
else //It is not z or less
if (symbol>=a) //so is it a or greater?
if (symbol>=z) //YES so is it z or less?
//Then it is a small letter
system.out.println(you have the small letter symbol
else //it is not less than z
system.out.println(
"the code is less than a and it's not a letter)
else
system.out.println(the code is less than a so it's not a letter)
如何工作
這個(gè)程序用來識別存儲在變量symbol中的值是大寫字母、小寫字母還是其他字符。它首先產(chǎn)生一個(gè)在0到127之間的隨機(jī)字符,這個(gè)字符與基本的7位ASCII字符集(ISO646)中的字符對應(yīng)。你可以在附錄D中查閱ASCII字符集編碼。ASCII字符的編碼與Unicvde字符集中對應(yīng)字符的編碼相同。在這個(gè)字符集中,字母'A'到'Z'用65到90這組相鄰的ASCII編碼來表示。小寫字母用另一組從97到122·的相鄰ASCII編碼來表示。所以,你只需將字符編碼加上32就可以將任何大寫字母轉(zhuǎn)換為小寫字母。
該If語句確實(shí)有一些復(fù)雜,所以讓我們來看看下述邏輯圖。
這張圖一共有4條if語句。第一條if語句測試symbol是否大于等于'A'.如果成立,它可能是一個(gè)大寫字母、小寫字母或其他可能的編碼,反之,它肯定不是一個(gè)字母。所以,if語句的else子句(直到程序結(jié)尾)對這種結(jié)果產(chǎn)生一個(gè)相應(yīng)的信息。
相關(guān)推薦:
2015計(jì)算機(jī)等級考試二級Java入門教程第一章匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |