流程控制敘述_第1頁(yè)
流程控制敘述_第2頁(yè)
流程控制敘述_第3頁(yè)
流程控制敘述_第4頁(yè)
流程控制敘述_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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)介

1、 流程控制敘述 內(nèi) 容 大 綱nif敘述nif-else敘述n條件運(yùn)算子n巢狀if-else敘述nswitch-case敘述nbreak、continue敘述n標(biāo)記n控制敘述實(shí)例if敘述(1/2)nif敘述的語(yǔ)法為 if(條件式) 條件敘述區(qū)塊n一個(gè)if敘述可以根據(jù)條件式的成立與否來(lái)決定條件敘述區(qū)塊中的敘述是否要執(zhí)行,流程圖n我們以下列的敘述為例: if(i%j)=0)/條件式為 (i%j)=0 system.out.println(i+是+j+的倍數(shù)); /此敘述為條件敘述區(qū)塊中唯一的敘述 if敘述(2/2)n說(shuō)明:nexample: 假設(shè)變數(shù)i的值為9,變數(shù)j的值為3,因?yàn)?除以3的餘數(shù)為

2、0(9是3的倍數(shù)),則上列條件敘述會(huì)在命令視窗中輸出: 9是3的倍數(shù) 反之,若假設(shè)變數(shù)i的值是8,變數(shù)j的值是3,因?yàn)?除以3的餘數(shù)不為0(8不是3的倍數(shù)),所以命令視窗中不會(huì)有任何輸出。 if-else敘述(1/2)nif-else的敘述與if敘述非常類似,它只是多了於條件式的值為false時(shí)必須執(zhí)行的條件敘述區(qū)塊的部份而已,它的用法為:nif(條件式) 條件敘述區(qū)塊1 else 條件敘述區(qū)塊2n當(dāng)條件式成立時(shí),條件敘述區(qū)塊1中的敘述會(huì)被執(zhí)行,而若條件式不成立時(shí),則條件敘述區(qū)塊2中的敘述會(huì)被執(zhí)行,流程圖if-else敘述(2/2)nexample if(i%j)=0)/條件式為 (i%j)=

3、0 system.out.println(i+是+j+的倍數(shù)); /此敘述在條件式成立時(shí)會(huì)執(zhí)行 else system.out.println(i+“不是”+j+“的倍數(shù)”);/此敘述在條件式不成立時(shí)會(huì)執(zhí)行n假設(shè)變數(shù)i的值為9,變數(shù)j的值為3,則此敘述會(huì)在命令視窗中印出 9是3的倍數(shù)n若假設(shè)變數(shù)i的值為8,變數(shù)j的值為3,則此敘述會(huì)在命令視窗中輸出 8不是3的倍數(shù) 條件運(yùn)算子(1/2)n以下我們介紹與if-else敘述有類似功能的條件運(yùn)算子(?:),條件運(yùn)算子的用法如下:條件式 ? 值1 : 值2n在條件式成立時(shí),條件運(yùn)算子會(huì)傳回值1,而在條件式不成立時(shí),條件運(yùn)算子會(huì)傳回值2nexample:

4、成績(jī) = 60 ? “及格” : “不及格”n在變數(shù)成績(jī)大於等於60時(shí),上列由條件運(yùn)算子所構(gòu)成的式子傳回的值為及格字串。反之,在變數(shù)成績(jī)不是大於等於60(即小於60)時(shí),上列由條件運(yùn)算子所構(gòu)成的式子傳回的值為不及格字串條件運(yùn)算子(2/2)nexample:以下的if-else敘述if(成績(jī) = 60) system.out.println(及格);else system.out.println(“不及格”);n可以用條件運(yùn)算子改寫如下system.out.println(成績(jī)=60 ? 及格 : 不及格 );巢狀if-else敘述(1/4)n以下我們介紹巢狀if-else敘述(nesting

5、if-else statement),所謂巢狀if-else敘述指的是if-else敘述區(qū)塊中還包含有if-else敘述nexample: if(ij) if(ik) system.out.println(i+最大); /表示ij且ik else system.out.println(k+最大); /表示ij且kielse if(jk) system.out.println(j+“最大”); /表示 非(ij) (即ij)且 (jk) else system.out.println(k+“最大”); /表示 非(ij) (即ij)且 非(jk) (即jk) 巢狀if-else敘述(2/4)n說(shuō)

6、明:n巢狀if-else敘述也可以用條件運(yùn)算子取代之,例如ij?(ik?i:k):(jk?j:k) 會(huì)傳回i、j、k三個(gè)變數(shù)中數(shù)值最大的值。nexample: if(成績(jī)=90) system.out.println(優(yōu));else if(成績(jī)=80) system.out.println(甲); else if(成績(jī)=70) system.out.println(乙); else if(成績(jī)=60) system.out.println(丙); else system.out.println(不及格); 巢狀if-else敘述(3/4)n以上的程式片段,會(huì)依變數(shù)成績(jī)的值而輸出 “優(yōu)”、“甲”

7、、“乙”、“丙”或“不及格” 等字串,上述的程式片斷只有else部份的敘述區(qū)塊內(nèi)含巢狀的if-else敘述,是一種比較特別的巢狀結(jié)構(gòu)。碰到這種特別的巢狀if-else敘述,一般我們會(huì)取消各行之間的縮排,寫成如下的格式:nif (成績(jī)=90) system.out.println(優(yōu)); else if (成績(jī)=80) system.out.println(甲); else if (成績(jī)=70) system.out.println(乙); else if (成績(jī)=60) system.out.println(丙); else system.out.println(不及格);巢狀if-else敘

8、述(4/4)n上述巢狀if-else敘述也可以使巢狀條件運(yùn)算子來(lái)改寫如下:nsystem.out.println( (成績(jī)=90)?優(yōu): (成績(jī)=80)?“甲”: (成績(jī)=70)?乙: (成績(jī)=60)?丙:不及格 ); switch-case敘述(1/4)n以下我們介紹switch-case敘述,其用法為 switch(算式) case定值1: 敘述區(qū)塊1 case定值2: 敘述區(qū)塊2 . case定值n: 敘述區(qū)塊n default: 預(yù)設(shè)敘述區(qū)塊n上列switch-case敘述的用法中,算式及定值1、定值2、定值n都必須為int型別,或是可轉(zhuǎn)換為int型別而不會(huì)有數(shù)值誤差的char型別、b

9、yte型別及short型別。switch-case敘述(2/4)n敘述switch-case的流程圖nswitch-case敘述會(huì)先對(duì)算式求值,然後再依序於case關(guān)鍵字後的定值1、定值2、定值n尋找與算式的值吻合(match)的定值。假若有找到,則程式執(zhí)行流程就轉(zhuǎn)到相對(duì)的敘述區(qū)塊中執(zhí)行,如果找不到與算式吻合的定值,則程式執(zhí)行流程會(huì)轉(zhuǎn)到default關(guān)鍵字後的預(yù)設(shè)敘述區(qū)塊中執(zhí)行,而如果沒(méi)有與算式吻合的定值,而又沒(méi)有default關(guān)鍵字,則程式執(zhí)行流程會(huì)跳過(guò)整個(gè)switch敘述。switch-case敘述(3/4)n請(qǐng)注意,若有吻合的定值要執(zhí)行相同的敘述區(qū)塊,我們可以將數(shù)個(gè)case 定值 寫在一

10、起,我們只要在其中間以冒號(hào)隔開(kāi)即可:case 定值1:case 定值2:case 定值n : 敘述區(qū)塊nswitch-case敘述中的case定值,其用法非常類似我們後面馬上要介紹的標(biāo)記(label)的用法,所謂標(biāo)記是在程式中替某個(gè)敘述加上識(shí)別名稱,標(biāo)記的用法在本章稍後將有詳細(xì)介紹。n關(guān)鍵字case中定值的用法與標(biāo)記(label)用法的相似性,形成switch-case敘述中的流經(jīng)(fall through)現(xiàn)象。switch-case敘述(4/4)n可以使用break敘述來(lái)打破敘述區(qū)塊間的流經(jīng)現(xiàn)象,其用法為將break敘述列為每個(gè)敘述區(qū)塊的最後一個(gè)敘述,當(dāng)程式執(zhí)行流程在碰到break敘述之後

11、不會(huì)再進(jìn)入switch-case敘述中的其他敘述區(qū)塊而會(huì)直接跳離整個(gè)switch-case敘述區(qū)塊,即執(zhí)行流程轉(zhuǎn)移到整個(gè)switch-case敘述之後。nexample: switch (成績(jī)/10) case 10: case 9: system.out.println(優(yōu));break; case 8: system.out.println(甲);break; case 7: system.out.println(乙);break; case 6: system.out.println(丙);break; default: system.out.println(不及格); 說(shuō)明: brea

12、k、continue敘述與標(biāo)記的使用 (1/3)nbreak敘述可以使程式的執(zhí)行跳離switch-case敘述區(qū)塊,實(shí)際上,break敘述也可以用來(lái)跳離迴圈敘述區(qū)塊(包括for迴圈敘述區(qū)塊、while迴圈敘述區(qū)塊及do迴圈敘述區(qū)塊)。nexample:int 陣列=1,2,3,0,4,5,0,6;for (int i=0;i陣列.length;+i) if (陣列i=0) break; else system.out.print(陣列i); n上列的程式片斷執(zhí)行結(jié)果為印出123(即陣列0、陣列1、陣列2的值)之後即會(huì)停止執(zhí)行,這是因?yàn)楫?dāng)變數(shù)i的值為3時(shí),條件式陣列i=0成立,此時(shí)會(huì)執(zhí)行brea

13、k敘述,而此時(shí)程式執(zhí)行流程會(huì)跳離整個(gè)迴圈敘述區(qū)塊。break、continue敘述與標(biāo)記的使用 (2/3)ncontinue,continue敘述會(huì)直接執(zhí)行迴圈的遞增敘述,並使程式執(zhí)行流程直接跳回迴圈敘述區(qū)塊的開(kāi)頭。nexample:int 陣列=1,2,3,0,4,5,0,6;for (int i=0;i 標(biāo)記識(shí)別名稱標(biāo)記識(shí)別名稱: 敘述敘述;nbreak敘述與continue敘述可以配合標(biāo)記的使用來(lái)作較複雜的程式執(zhí)行流程控制,其用法為在break關(guān)鍵字或continue關(guān)鍵字之後加上標(biāo)記識(shí)別名稱 = break 標(biāo)記識(shí)別名稱標(biāo)記識(shí)別名稱;nexample:int 陣列= 1,2,3,0,4

14、,5,6,0,7,8,9,0 ; 外迴圈: for (int 列=0;列=3;+列) 內(nèi)迴圈: for (int 欄=0;欄=排行) break; 13: /敘述:while 定義區(qū)塊結(jié)束 14: system.out.println(“排行為第”+排行+“的閏年為公元”+ 年份 +年); 15: /方法:main() 定義區(qū)塊結(jié)束 16: /類別:閏年排行 定義區(qū)塊結(jié)束n程式執(zhí)行結(jié)果the endif流程圖if-else流程圖switch-case流程圖執(zhí)行結(jié)果執(zhí)行結(jié)果執(zhí)行結(jié)果程式說(shuō)明n在上列敘述中,條件式為(i%j)=0(此條件式是用以測(cè)試變數(shù)i除以變數(shù)j的餘數(shù)是否為0,即測(cè)試變數(shù)i是否為

15、變數(shù)j的倍數(shù))而條件敘述區(qū)塊僅包含一個(gè)敘述system.out.println(i+“是”+j+“的倍數(shù)”); n當(dāng)if敘述中的條件式的值為true時(shí)(當(dāng)變數(shù)i除以變數(shù)j的餘數(shù)為0時(shí)),條件敘述區(qū)塊中的敘述( 即system.out.println(i+是+j+的倍數(shù)); 敘述 )將會(huì)執(zhí)行;反之, 當(dāng)if敘述中的條件式值為false時(shí)(當(dāng)變數(shù)i除以變數(shù)j的餘數(shù)不為0時(shí)),則條件敘述區(qū)塊中的敘述不會(huì)執(zhí)行。程式說(shuō)明n上述程式片段可以印出i、j、k三個(gè)變數(shù)中最大的那一個(gè)變數(shù)的值,巢狀的if-else敘述必須注意if及else關(guān)鍵字的配對(duì),它的原則與其他配對(duì)符號(hào)(如大括號(hào)大括號(hào)、中括號(hào)中括號(hào)及小括小括

16、號(hào)號(hào)等)的配對(duì)原則相同,這個(gè)原則是if關(guān)鍵字與程式後面第一個(gè)尋找到的else關(guān)鍵字配對(duì),但是若在尋找else關(guān)鍵字的過(guò)程中曾經(jīng)出現(xiàn)其他的if關(guān)鍵字,則需要先略過(guò)相同數(shù)目的else關(guān)鍵字後再與其後出現(xiàn)的第一個(gè)else關(guān)鍵字配對(duì)。例如,上面所列的程式碼中加上底線的if關(guān)鍵字與else關(guān)鍵字是配對(duì)的一組if-else關(guān)鍵字。一般而言,我們會(huì)使用縮排來(lái)突顯if及else關(guān)鍵字的配對(duì)關(guān)係。程式說(shuō)明n上述的寫法是不是使用巢式if-else敘述還簡(jiǎn)單與明瞭呢?請(qǐng)注意,上列程式片段每一個(gè)case關(guān)鍵字對(duì)應(yīng)的敘述區(qū)塊都是以break敘述作為最後一個(gè)敘述,這是switch-case敘述用以去除流經(jīng)(fall th

17、rough)現(xiàn)象的的標(biāo)準(zhǔn)用法。若我們將所有的break敘述去除,則成績(jī)?yōu)?0以上者會(huì)印出優(yōu)、甲、乙、丙及不及格,而成績(jī)?yōu)?0以上者會(huì)印出甲、乙、丙及不及格,餘類推。位於最後的預(yù)設(shè)敘述區(qū)塊並沒(méi)有加上break敘述,這是因?yàn)轭A(yù)設(shè)敘述區(qū)塊之後已經(jīng)沒(méi)有其他敘述區(qū)塊了,因此沒(méi)有流經(jīng)的問(wèn)題,不需要再加上break敘述了。 程式說(shuō)明n在上列程式片段中,陣列是一個(gè)4列3欄的陣列變數(shù),列的編號(hào)為由0至3,欄的編號(hào)為由0至2,上列程式片段會(huì)在命令視窗中印出123,這是因?yàn)樵?變數(shù)列的值為1及變數(shù)欄的值為0 時(shí),條件式陣列列欄=0(陣列10=0)成立,程式執(zhí)行流程會(huì)執(zhí)行敘述 break 外迴圈; 而跳離外層識(shí)別名稱

18、為外迴圈的迴圈。n我們?nèi)魧⑸狭谐淌狡瑪嘀械腷reak 外迴圈; 敘述改為break 內(nèi)迴圈;敘述,則程式片段會(huì)在命令視窗中印出123689,這是因?yàn)樵谧償?shù)列的值為1及變數(shù)欄的值為0 時(shí),條件式陣列列欄=0(陣列10=0)成立,程式執(zhí)行流程會(huì)執(zhí)行敘述break 內(nèi)迴圈; 敘述跳離內(nèi)層命名為內(nèi)迴圈的迴圈,而接著執(zhí)行外層迴圈的下一個(gè)反覆(在此反覆中,變數(shù)列的值為2)。在變數(shù)列的值為2及變數(shù)欄的值為1 時(shí),條件式陣列列欄=0(陣列21=0)成立,程式執(zhí)行流程則再度跳離內(nèi)層迴圈,而接著執(zhí)行外層迴圈的下一個(gè)反覆(在此反覆中,變數(shù)列的值為3)。最後,在變數(shù)列的值為3及變數(shù)欄的值為2 時(shí),條件式陣列列欄=0(

19、陣列32=0)成立,程式執(zhí)行流程則再度跳離內(nèi)層迴圈,而預(yù)計(jì)進(jìn)行外層迴圈的下一個(gè)反覆,而因?yàn)樽償?shù)列的值為4已超過(guò)外層迴圈指定的範(fàn)圍,所以整個(gè)程式的執(zhí)行即停止了。 程式說(shuō)明n以類似的用法,continue敘述也可以與標(biāo)記配合使用,例如,若我們將上列程式片斷中的break 外迴圈; 敘述改為 continue 外迴圈; 敘述,則程式片段會(huì)在命令視窗中印出123689,這是因?yàn)樵谧償?shù)列的值為1及變數(shù)欄的值為0 時(shí),條件式陣列列欄=0(陣列10=0)成立,程式執(zhí)行流程會(huì)執(zhí)行敘述continue 外迴圈; 敘述而回到外層迴圈敘述區(qū)塊的開(kāi)頭,繼續(xù)執(zhí)行外層迴圈的下一個(gè)反覆(此反覆中,變數(shù)列的值為2)。另外,同

20、樣的情形亦發(fā)生在在變數(shù)列的值為2及變數(shù)欄的值為1 時(shí)及變數(shù)列的值為3及變數(shù)欄的值為2 時(shí)。 程式說(shuō)明n若我們將上列程式片斷中的break 外迴圈; 敘述改為continue 內(nèi)迴圈; 敘述,則程式片段會(huì)在命令視窗中印出123456789,這是因?yàn)樵谧償?shù)列的值為1及變數(shù)欄的值為0 時(shí),條件式陣列列欄=0(陣列10=0)成立,程式執(zhí)行流程會(huì)執(zhí)行敘述continue 內(nèi)迴圈; 敘述而回到內(nèi)層迴圈敘述區(qū)塊的開(kāi)頭,繼續(xù)執(zhí)行內(nèi)層迴圈的下一個(gè)反覆(此反覆中,變數(shù)列的值為1,變數(shù)欄的值為1)。另外,同樣的情形亦發(fā)生在在變數(shù)列的值為2及變數(shù)欄的值為1 時(shí)及變數(shù)列的值為3及變數(shù)欄的值為2 時(shí)。也就是說(shuō)所有值為0的

21、元素會(huì)被跳過(guò)列印,所以印出的結(jié)果為123456789。 程式說(shuō)明n範(fàn)例程式5-1是一個(gè)閏年測(cè)試的程式,此程式可以讓使用者輸入一個(gè)公元年份,並判斷此公元年份是否為閏年。請(qǐng)注意,公元記年中,每4年有一個(gè)閏年,每100年減少一個(gè)閏年,而每400年再加回1個(gè)閏年。n第10-15行程式說(shuō)明n此6行合在一起是一個(gè)單一的三層巢狀if-else敘述,用以測(cè)試變數(shù)年份是否代表閏年。若第12行條件式成立則代表變數(shù)年份是4的倍數(shù)也是100的倍數(shù)也是400的倍數(shù),它代表一個(gè)閏年公元年份;若程式執(zhí)行流程進(jìn)行到第13行代表變數(shù)年份是4的倍數(shù)也是100的倍數(shù),但不是400的倍數(shù),它代表一個(gè)100年應(yīng)該扣掉一次的非閏年公元年份;若程式執(zhí)行流程進(jìn)行到第14行代表變數(shù)年份是4的倍數(shù)但不是100的倍數(shù),它代表一個(gè)每四年一次的一般的閏年公元年份;若程式執(zhí)行流程進(jìn)行到第15行代表變數(shù)年份不是4的倍數(shù),它代表的公元年份絕對(duì)不會(huì)是閏年。程式說(shuō)明n第5-6行 5: public static void main(string 參數(shù)) 6: int 排行=integer.parseint(參數(shù)0); nmain方法可以自命令列讀入?yún)?shù)並將之存於main方法中宣告的st

溫馨提示

  • 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)論