Java程序設(shè)計(jì)基礎(chǔ)-控制執(zhí)行流程_第1頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)-控制執(zhí)行流程_第2頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)-控制執(zhí)行流程_第3頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)-控制執(zhí)行流程_第4頁(yè)
Java程序設(shè)計(jì)基礎(chǔ)-控制執(zhí)行流程_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

新一代信息技術(shù)"十三五"系列規(guī)劃Java程序設(shè)計(jì)基礎(chǔ)教程第三章控制執(zhí)行流程控制執(zhí)行流程,顧名思義是流程控制地意思,即根據(jù)具體情況去做不同地事情。最常見(jiàn)地控制執(zhí)行流程是游戲機(jī),游戲機(jī)里地物會(huì)根據(jù)按鍵組合來(lái)釋放不同地技能。在程序,控制執(zhí)行流程與此相似,Java有關(guān)地關(guān)鍵字有if-else,while,do-while,for,break,continue,return與switch選擇語(yǔ)句,Java不支持goto,但是goto也是Java地關(guān)鍵字。所有地條件語(yǔ)句都利用條件表達(dá)式地真或者假來(lái)決定執(zhí)行路徑,在第二章介紹地所有地關(guān)系運(yùn)算符都可以用來(lái)構(gòu)造條件語(yǔ)句。值得注意地是,在C與C++,可以使用一個(gè)數(shù)字來(lái)作為真假條件,但這在Java是不被允許地。三.一選擇結(jié)構(gòu)語(yǔ)句選擇結(jié)構(gòu)語(yǔ)句類(lèi)似于"如果……就……否則……"語(yǔ)句,我們可以簡(jiǎn)單地理解為,如果條件成立,就這樣,否則就那樣。程序無(wú)法自行決定干什么,妳需要要告訴它在何種情況妳要做何種操作。三.一.一if條件語(yǔ)句if-else語(yǔ)句是選擇結(jié)構(gòu)語(yǔ)句最基礎(chǔ)地語(yǔ)句,也是控制程序流程地最基本形式。其else是可選語(yǔ)句,在一些情況下我們可以省略。其使用方式如下:if(boolean-expression){statement;//執(zhí)行語(yǔ)句內(nèi)容}或if(boolean-expression){statement;//執(zhí)行語(yǔ)句內(nèi)容}else{statement;//執(zhí)行語(yǔ)句內(nèi)容}第一種情況是很簡(jiǎn)單地判斷,例如,如果true,那么就讓小鵬回家吃飯,不需要其它條件。但有些情況會(huì)稍顯復(fù)雜,如今天是周一,小明值日,否則就小紅值日。這種有備選方案地判斷語(yǔ)句就需要使用有分支地if語(yǔ)句了。具體使用方式請(qǐng)參看案例三-一。案例三-一if-else初探運(yùn)行結(jié)果如圖三-一所示。圖三-一運(yùn)行結(jié)果案例簡(jiǎn)單介紹了if-else地使用,從邏輯上非常容易理解,因?yàn)橹挥袉蝹€(gè)分支地if-else,但有時(shí)候情況可能有很多種,例如考試成績(jī)?cè)u(píng)分,九零分以上是A,八零~九零分是B,七零~八零分是C,六零~七零分是D,六零分以下是E。簡(jiǎn)單地使用單個(gè)分支地if-else是無(wú)法處理這種情況地,這個(gè)時(shí)候就需要多次使用if-else分支來(lái)實(shí)現(xiàn)了。具體使用方式請(qǐng)參看案例三-二。案例三-二if-else嵌套語(yǔ)句運(yùn)行結(jié)果如圖三-二所示。圖三-二運(yùn)行結(jié)果案例對(duì)學(xué)生地成績(jī)與評(píng)分標(biāo)準(zhǔn)行比較并給出該學(xué)生地最終評(píng)分。細(xì)心地讀者可能發(fā)現(xiàn)了在案例,只有判斷學(xué)生地分?jǐn)?shù)是不是大于評(píng)分地最低分,但是沒(méi)有說(shuō)明分?jǐn)?shù)地上限。其實(shí)這里只是一種簡(jiǎn)便地寫(xiě)法。因?yàn)橹灰?九零<=score"成立,那么后續(xù)地判斷分支都不會(huì)再行判斷了,所以,當(dāng)程序走到"八零<=score"分支地時(shí)候,已經(jīng)很明確地知道score比九零分要低,所以,上限也就沒(méi)有必要去限定了。if-else分支內(nèi)還可以套用if-else分支,因?yàn)橛袝r(shí)條件比較復(fù)雜,這么使用也是有可能地,其語(yǔ)句如下:if(boolean-expression){if(boolean-expression){statement;//執(zhí)行語(yǔ)句內(nèi)容}else{statement;//執(zhí)行語(yǔ)句內(nèi)容}}else{statement;//執(zhí)行語(yǔ)句內(nèi)容}但是當(dāng)循環(huán)嵌套層數(shù)過(guò)多時(shí)不便于閱讀,建議嵌套地層數(shù)不要超過(guò)三層,實(shí)際上嵌套很多層地情況是可以避免地,如果邏輯嵌套有四五層,說(shuō)明代碼邏輯沒(méi)有理順,需要好好思考其邏輯并行優(yōu)化。三.一.二switch條件語(yǔ)句if-else語(yǔ)句比較常用,也很實(shí)用,但是對(duì)于一些分支很多地邏輯,if-else處理起來(lái)就不那么得心應(yīng)手了。switch是實(shí)現(xiàn)這種多路選擇地不二之選。switch在JDK一.七之前只能接受int或者可以向上轉(zhuǎn)型成int類(lèi)型地值,而在有些情況下還是無(wú)法使用,在JDK一.七及以后地版本,switch可以支持字符串作為選擇因子,因此有了更大地舞臺(tái)。首先我們來(lái)看看switch地語(yǔ)法結(jié)構(gòu)。switch(selector){caseselector:statement;break;caseselector:statement;break;caseselector:statement;break;caseselector:statement;break; ... default:statement;}switch在將阿拉伯?dāng)?shù)字轉(zhuǎn)換成文大寫(xiě)數(shù)字地時(shí)候比if-else干凈利落,下面我們通過(guò)案例三-三來(lái)學(xué)這種轉(zhuǎn)換地方式。案例三-三switch實(shí)現(xiàn)阿拉伯?dāng)?shù)字轉(zhuǎn)文大寫(xiě)數(shù)字運(yùn)行結(jié)果如圖三-三所示。圖三-三運(yùn)行結(jié)果從案例可以看出,switch在多路選擇時(shí)比if-else干凈很多,代碼行數(shù)也少很多。switchcase后默認(rèn)會(huì)跟一個(gè)break,這個(gè)是結(jié)束標(biāo)記,意思是:如果是匹配到了,則跳出匹配;如果沒(méi)有地話,它會(huì)繼續(xù)向下執(zhí)行,直到碰到break結(jié)束。如果所有匹配項(xiàng)都沒(méi)有匹配上,則執(zhí)行default里地內(nèi)容。如果是從當(dāng)前月份開(kāi)始,計(jì)算到年底總還有多少天,就可以忽略break,如案例三-四所示。案例三-四當(dāng)前月份距元旦天數(shù)運(yùn)行結(jié)果如圖三-四所示。圖三-四運(yùn)行結(jié)果從運(yùn)行結(jié)果來(lái)看,如果當(dāng)前月份是三月份地話,那么從匹配到三開(kāi)始,以后所有地分支都會(huì)執(zhí)行,而三六五與五九地差值剛好是三零六??梢?jiàn),break并非是需要地,但是切記,省去break對(duì)于一些情景來(lái)說(shuō)是合理地,但如果處理不慎可能會(huì)得出意外地結(jié)果。例如,在案例三-三,省去break之后,如果阿拉伯?dāng)?shù)字是三,那么輸出結(jié)果就是"拾",這種輸出是我們不想要地。對(duì)于switch來(lái)說(shuō),何時(shí)添加與去除break都需要謹(jǐn)慎對(duì)待。三.二循環(huán)結(jié)構(gòu)語(yǔ)句除了選擇結(jié)構(gòu)語(yǔ)句,還有循環(huán)結(jié)構(gòu)語(yǔ)句,對(duì)于這種語(yǔ)句,只要條件滿足就會(huì)無(wú)限循環(huán)執(zhí)行。循環(huán)結(jié)構(gòu)語(yǔ)句有while,do-while與for。同選擇結(jié)構(gòu)分支類(lèi)似,它們以表達(dá)式地真假來(lái)決定是否要行下一次循環(huán)。這些循環(huán)控制語(yǔ)句也被稱(chēng)為迭代語(yǔ)句。三.二.一while循環(huán)語(yǔ)句同其字面意思一致,while就是當(dāng)條件成立地時(shí)候,會(huì)去循環(huán)執(zhí)行循環(huán)體內(nèi)地邏輯。其用法格式如下:while(boolean-expression){statement;//循環(huán)體}每次執(zhí)行前,while語(yǔ)句首先去判斷執(zhí)行表達(dá)式是否符合條件,只有條件符合才會(huì)行一次循環(huán)體內(nèi)地內(nèi)容,執(zhí)行完之后會(huì)繼續(xù)判斷該表達(dá)式是否符合繼續(xù)循環(huán)地條件,以此往復(fù),直到循環(huán)條件為假才跳出循環(huán)。下面通過(guò)案例三-五來(lái)熟悉while語(yǔ)句地使用。案例三-五循環(huán)輸出一~一零運(yùn)行結(jié)果如圖三-五所示。圖三-五運(yùn)行結(jié)果案例使用了while與if-else地嵌套邏輯。案例,初始化了一個(gè)標(biāo)記量i,其值為零,第一次判斷其值是否小于一一,如果通過(guò),則標(biāo)記量加一。然后判斷當(dāng)前值是否是偶數(shù),如果是,則打印"**",否則判斷該值是否是五,如果不是,則打印"##",否則打印一串美元符號(hào)。一次邏輯結(jié)束后,會(huì)再次判斷i地值是否小于一一,如果是,則繼續(xù)循環(huán),當(dāng)i=一零時(shí),程序依然會(huì)入循環(huán)體,此時(shí)i=一一,繼續(xù)執(zhí)行奇偶判斷及若是奇數(shù)是否是五地判斷,當(dāng)該循環(huán)體執(zhí)行結(jié)束入下一次循環(huán)判斷地時(shí)候,判斷i是否小于一一為假,循環(huán)跳出,程序結(jié)束。在使用循環(huán)時(shí),如果案例使用了一個(gè)標(biāo)記量來(lái)判斷是否執(zhí)行循環(huán)地邏輯,那么一定要注意該標(biāo)記量地值變化是否符合預(yù)期。在案例三-五,若移除了標(biāo)記量地自增操作,則會(huì)導(dǎo)致程序一直運(yùn)行下去,輕則消耗系統(tǒng)地資源,重則形成死循環(huán)。三.二.二do-while循環(huán)語(yǔ)句while語(yǔ)句需要先判斷條件是否滿足,只有條件滿足了才會(huì)走循環(huán)體內(nèi)地邏輯,do-while則與之有一些不同。do-while語(yǔ)句會(huì)先執(zhí)行循環(huán)體內(nèi)地邏輯,然后再判斷邏輯是否滿足條件。do-while語(yǔ)句地格式如下:do{statement;}while(boolean-expression);對(duì)于那些無(wú)論條件是否成立,至少邏輯需要執(zhí)行一次地任務(wù),do-while是最干凈地處理方式。下面通過(guò)案例三-六來(lái)說(shuō)明while與do-while地不同。案例三-六while與do-while運(yùn)行結(jié)果如圖三-六所示。圖三-六運(yùn)行結(jié)果案例地對(duì)比還是比較明顯地,while語(yǔ)句在判斷到i<二時(shí)會(huì)判定條件不符合,跳出循環(huán),但是do-while語(yǔ)句則會(huì)先執(zhí)行循環(huán),然后判定是否需要執(zhí)行下一次循環(huán)。循環(huán)地理念不同,使用也會(huì)不同,可以根據(jù)其特在不同地場(chǎng)景下選擇合適地語(yǔ)句。三.二.三for循環(huán)語(yǔ)句for語(yǔ)句是最常用地迭代語(yǔ)句。for語(yǔ)句在迭代之前都要行初始化,隨后對(duì)條件行判斷,并且如果本次條件成立,在迭代結(jié)束地時(shí)候它都會(huì)以某種形式行步,這個(gè)步與案例三-六地i變量類(lèi)似。for語(yǔ)句地語(yǔ)法格式如下:for(init;boolean-expression;step){statement;}for循環(huán)在使用地時(shí)候首先需要初始化表達(dá)式(init),然后設(shè)定循環(huán)控制表達(dá)式(boolean-expression),如果表達(dá)式為真,則執(zhí)行循環(huán)體地內(nèi)容,然后行步,再判斷循環(huán)控制表達(dá)式是否為真,繼續(xù)循環(huán)。for循環(huán)地使用如案例三-七所示。案例三-七for循環(huán)地使用運(yùn)行結(jié)果如圖三-七所示。圖三-七運(yùn)行結(jié)果for語(yǔ)句可以同時(shí)有多個(gè)init表達(dá)式,前提是它們是相同地類(lèi)型,在定義時(shí),通過(guò)","號(hào)分割,這些分割地語(yǔ)句會(huì)獨(dú)立運(yùn)行,互不干擾。多變量for語(yǔ)句地使用方式如案例三-八所示。案例三-八多變量for語(yǔ)句運(yùn)行結(jié)果如圖三-八所示。圖三-八運(yùn)行結(jié)果在案例三-八定義了i與j兩個(gè)變量,i地初始值是零,j地初始值是一,循環(huán)條件是i<五,步是i每次自增一,j是每次乘以二。通過(guò)輸出結(jié)果可以看出,兩者獨(dú)立運(yùn)行,互不影響。對(duì)于一些特殊地場(chǎng)景,for循環(huán)地這種可以定義多個(gè)變量地方式是獨(dú)有地,而且,無(wú)論是在初始化還是在步部分,這些語(yǔ)句都是順序執(zhí)行地。三.二.四break與continue在一些循環(huán)可能有一些特殊情況需要結(jié)束循環(huán)或者行下一次循環(huán),這時(shí)候就需要使用break與contiune了。前面在switch多路分支結(jié)構(gòu)我們已經(jīng)用到了break,break是打斷地意思,例如在循環(huán),當(dāng)循環(huán)到一個(gè)特定地境況下,需要終止循環(huán),這時(shí)就使用break。當(dāng)某個(gè)自增量地值是五地倍數(shù)地時(shí)候,不執(zhí)行循環(huán)體地內(nèi)容,而是繼續(xù)下一次循環(huán),跳過(guò)本次循環(huán),這時(shí)則使用continue,如案例三-九所示。案例三-九break與continue運(yùn)行結(jié)果如圖三-九所示。圖三-九運(yùn)行結(jié)果從案例可以看出,break是直接跳出循環(huán)體,執(zhí)行后續(xù)地代碼邏輯,而continue則只是跳出本次循環(huán),執(zhí)行下一次循環(huán)。讀者需要仔細(xì)地辨別兩者地區(qū)別,對(duì)其行恰當(dāng)使用,不當(dāng)?shù)厥褂脛t會(huì)讓程序產(chǎn)生各種莫名奇妙地異常。在JDK一.五以后新增了foreach語(yǔ)句,它是for循環(huán)地加強(qiáng)版,其語(yǔ)法使用方式如下。Int[]arr=newint[一零];for(intI:arr){System.out.println("i="+i);}foreach語(yǔ)句對(duì)于數(shù)組與集合類(lèi)型地遍歷非常地方便,其語(yǔ)法也很簡(jiǎn)單,在不需要指定遍歷順序與規(guī)則時(shí)頗為常用。三.三動(dòng)手任務(wù):冒泡排序任務(wù)介紹一.任務(wù)描述編寫(xiě)一個(gè)排序地程序,可以讓一個(gè)混亂地?cái)?shù)組變成一個(gè)有序地?cái)?shù)組。二.運(yùn)行結(jié)果任務(wù)運(yùn)行結(jié)果如圖三-一零所示。圖三-一零運(yùn)行結(jié)果任務(wù)目地能夠熟練使用for循環(huán)。增強(qiáng)對(duì)if判斷語(yǔ)句地使用。實(shí)現(xiàn)思路冒泡地原則是,每一次循環(huán)結(jié)束之后都能將亂序地最大數(shù)放到亂序數(shù)列地最右邊。(一)用for循環(huán)對(duì)數(shù)組行循環(huán)。(二)從左往右依次比較相鄰地兩個(gè)數(shù),將較大者放到較小者地右邊,保證最右邊地?cái)?shù)字大于左邊地所有數(shù)字。(三)繼續(xù)執(zhí)行,依次將之后地較大數(shù)字放到較小數(shù)字地右邊,直到所有地?cái)?shù)字都比自己左邊地?cái)?shù)字大,比右邊地?cái)?shù)字小。實(shí)現(xiàn)代碼數(shù)組冒泡排序程序地實(shí)現(xiàn)代碼如案例三-一零所示。案例三-一零數(shù)組冒泡排序

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論