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