《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 項目3 猜數(shù)字游戲-Java流程控制_第1頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 項目3 猜數(shù)字游戲-Java流程控制_第2頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 項目3 猜數(shù)字游戲-Java流程控制_第3頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 項目3 猜數(shù)字游戲-Java流程控制_第4頁
《Java程序設(shè)計案例教程(微課版)(第2版)》 課件 項目3 猜數(shù)字游戲-Java流程控制_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目3猜數(shù)字游戲

——Java流程控制《Java程序設(shè)計案例教程(微課版)(第2版)》項目導(dǎo)入

大一班級為助新生融入校園,計劃舉辦聯(lián)誼晚會并設(shè)計猜數(shù)字游戲。張思睿剛學(xué)Java基本語法,急于一展身手,規(guī)劃游戲流程為玩家猜0到100間系統(tǒng)隨機生成的數(shù)字,猜錯有提示,直至猜中。他向胡老師說明想法,胡老師表示需學(xué)習(xí)流程控制知識,遂安排其查詢資料,并共同制定學(xué)習(xí)計劃,準(zhǔn)備逐步完成這一有趣的猜數(shù)字游戲項目

。學(xué)習(xí)目標(biāo)?掌握常用的流程控制結(jié)構(gòu)的基本使用方?法。?掌握分支結(jié)構(gòu)的使用。?掌握循環(huán)結(jié)構(gòu)的使用。?掌握方法的定義與應(yīng)用。?培養(yǎng)正確的人生觀和價值觀,弘揚精益求精的工匠精?神。(素養(yǎng)目標(biāo))目錄CONTENTS任務(wù)3.1了解程序的基本結(jié)構(gòu)任務(wù)3.2分支結(jié)構(gòu)任務(wù)3.3循環(huán)結(jié)構(gòu)和跳轉(zhuǎn)語句任務(wù)3.4方法項目實施

猜數(shù)字游戲項目實訓(xùn)

剪刀、石頭、布一般來說,程序的基本結(jié)構(gòu)包含3種:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這3種結(jié)構(gòu)有一個共同點,就是它們都只有一個入口,也只有一個出口。這些單一入、出口可以讓程序易讀、好維護,也可以減少調(diào)試的時間?,F(xiàn)在以流程圖的方式來介紹這3種結(jié)構(gòu)的不同。任務(wù)3.1了解程序的基本結(jié)構(gòu)任務(wù)3.1了解程序的基本結(jié)構(gòu)1.順序結(jié)構(gòu)本書前面所講的那些例子采用的都是順序結(jié)構(gòu),程序自上而下逐行執(zhí)行,一條語句執(zhí)行完之后繼續(xù)執(zhí)行下一條語句,一直到程序的末尾,如圖3-1所示。圖3-1順序結(jié)構(gòu)順序結(jié)構(gòu)在程序設(shè)計中是最常使用到的結(jié)構(gòu),在程序中扮演了非常重要的角色,大部分的程序都是依照這種由上而下的流程來設(shè)計的。任務(wù)3.1了解程序的基本結(jié)構(gòu)2.分支結(jié)構(gòu)分支結(jié)構(gòu)(也稱為選擇結(jié)構(gòu))是根據(jù)條件的成立與否決定要執(zhí)行哪些語句的一種結(jié)構(gòu),如圖3-2所示。圖3-2分支結(jié)構(gòu)當(dāng)判斷條件為true時,則運行“語句1”;當(dāng)判斷條件為false時,則執(zhí)行“語句2”。不論執(zhí)行哪一條語句,最后都會行“語句3”。任務(wù)3.1了解程序的基本結(jié)構(gòu)3.循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)根據(jù)循環(huán)條件的成立與否決定程序段落是否執(zhí)行。當(dāng)循環(huán)條件為真時,執(zhí)行的語句塊稱為循環(huán)主體。一般的循環(huán)結(jié)構(gòu)如圖3-3所示。圖3-3循環(huán)結(jié)構(gòu)目錄CONTENTS任務(wù)3.1了解程序的基本結(jié)構(gòu)任務(wù)3.2分支結(jié)構(gòu)任務(wù)3.3循環(huán)結(jié)構(gòu)和跳轉(zhuǎn)語句任務(wù)3.4方法項目實施

猜數(shù)字游戲項目實訓(xùn)

剪刀、石頭、布分支結(jié)構(gòu)就是對語句中條件的值進行判斷,進而根據(jù)不同的條件值執(zhí)行不同的語句。分支結(jié)構(gòu)分為if單分支結(jié)構(gòu)、if-else雙分支結(jié)構(gòu)、if-elseif-else多分支結(jié)構(gòu)以及switch多分支結(jié)構(gòu)。下面對這幾類分支結(jié)構(gòu)一一進行介紹。任務(wù)3.2分支結(jié)構(gòu)3.2.1if單分支結(jié)構(gòu)if單分支結(jié)構(gòu)用于對某種條件做出相應(yīng)的處理,如果滿足條件,就執(zhí)行相應(yīng)的操作。if語句的具體語法格式如下:圖3-4if單分支結(jié)構(gòu)上述語法格式中,判斷條件是布爾型的,當(dāng)判斷條件為true時,執(zhí)行語句才會執(zhí)行。if單分支結(jié)構(gòu)如圖3-4所示。if(判斷條件){

執(zhí)行語句}3.2.1if單分支結(jié)構(gòu)【例3-1】比較兩個整數(shù)的大小,然后將它們按照從大到小的順序保存并輸出?!纠}分析】比較兩個整數(shù)a、b的大小,如果a<b,則把a與b的值交換,否則a與b的值不變。最終,較大的整數(shù)保存在了a中,較小的整數(shù)保存在了b中。3.2.1if單分支結(jié)構(gòu)【程序?qū)崿F(xiàn)】publicclassExample3_1{publicstaticvoidmain(String[]args){inta=2,b=5;if(a<b){intt;t=a;a=b;b=t;}System.out.println("從大到小排序后的結(jié)果為:"+a+","+b);}}3.2.2if-else雙分支結(jié)構(gòu)if-else雙分支結(jié)構(gòu)是分支結(jié)構(gòu)中最通用的結(jié)構(gòu)之一,它會針對某種條件有選擇地進行處理,通常表現(xiàn)為“如果滿足某種條件,就進行某種處理,否則就進行另一種處理”。if-else語句的具體語法格式如下:if(判斷條件){

執(zhí)行語句1}else{

執(zhí)行語句2}3.2.2if-else雙分支結(jié)構(gòu)圖3-5if-else雙分支結(jié)構(gòu)上述語法格式中,判斷條件是布爾型的。當(dāng)判斷條件為true時,執(zhí)行語句1會執(zhí)行。當(dāng)判斷條件為false時,執(zhí)行語句2會執(zhí)行。if-else雙分支結(jié)構(gòu)如圖3-5所示。3.2.2if-else雙分支結(jié)構(gòu)【例3-2】對兩個整數(shù)進行大小比較,輸出較大的數(shù)?!纠}分析】對兩個數(shù)的大小比較可使用基本的比較運算符實現(xiàn),借用if-else雙分支結(jié)構(gòu)實現(xiàn)比較過程,將較大的數(shù)保存到第3個變量中。3.2.2if-else雙分支結(jié)構(gòu)【程序?qū)崿F(xiàn)】publicclassExample3_2{publicstaticvoidmain(String[]args){intx=0,y=1;intmax;if(x>y){max=x;}else{max=y;}System.out.println("較大的數(shù)是:"+max);}}3.2.2if-else雙分支結(jié)構(gòu)用if-else雙分支結(jié)構(gòu)實現(xiàn)的功能也可以用前面所學(xué)的條件運算符實現(xiàn),上述代碼中的if-else雙分支結(jié)構(gòu)可以使用下面的三目表達式來代替。intmax=x>y?x:y;任務(wù)實踐3-1立春習(xí)俗活動指南【任務(wù)描述】為弘揚二十四節(jié)氣文化,設(shè)計立春專屬活動推薦程序。用戶輸入當(dāng)日溫度,程序通過if-else雙分支判斷:氣溫≥10℃時推薦“郊外踏青”等戶外活動,否則推薦“家庭春卷制作”等室內(nèi)活動?!救蝿?wù)分析】1.使用if-else雙分支結(jié)構(gòu)判斷溫度閾值2.輸出推薦活動3.2.3if-elseif-else多分支結(jié)構(gòu)if-elseif-else多分支結(jié)構(gòu)用于針對某一事件的多種情況進行處理,通常表現(xiàn)為“如果滿足某種條件,則進行某種處理;如果滿足另一種條件,則進行另一種處理”。if-elseif-else多分支結(jié)構(gòu)的具體語法格式如下:if(判斷條件1){

執(zhí)行語句1}elseif(判斷條件2){

執(zhí)行語句2}…elseif(判斷條件n){

執(zhí)行語句n}else{

執(zhí)行語句n+1}3.2.3if-elseif-else多分支結(jié)構(gòu)上述語法格式中,判斷條件是布爾型的。當(dāng)判斷條件1為true時,會執(zhí)行執(zhí)行語句1。當(dāng)判斷條件1為false時,會繼續(xù)執(zhí)行判斷條件2。如果判斷條件2為true,則會執(zhí)行執(zhí)行語句2,依次類推。如果所有的判斷條件都為false,則意味著所有條件均未滿足,會執(zhí)行執(zhí)行語句n+1。if-elseif-else多分支結(jié)構(gòu)如圖3-6所示。圖3-6if-elseif-else多分支結(jié)構(gòu)3.2.3if-elseif-else多分支結(jié)構(gòu)【例3-3】對一個學(xué)生的考試成績進行等級劃分,如果分數(shù)大于80分,成績等級為優(yōu);如果分數(shù)大于70分,成績等級為良;如果分數(shù)大于60分,成績等級為中;否則,成績等級為差?!纠}分析】學(xué)生的成績可劃分為優(yōu)、良、中、差4個等級,因此,需要根據(jù)學(xué)生的成績進行多次判斷來確定學(xué)生的成績等級。3.2.3if-elseif-else多分支結(jié)構(gòu)【程序?qū)崿F(xiàn)】publicclassExample3_3{publicstaticvoidmain(String[]args){intgrade=75;if(grade>80){System.out.println("成績等級為優(yōu)");}elseif(grade>70){System.out.println("成績等級為良");}elseif(grade>60){System.out.println("成績等級為中");}else{System.out.println("成績等級為差");}}}3.2.4switch多分支結(jié)構(gòu)switch多分支結(jié)構(gòu)也是一種很常用的分支結(jié)構(gòu)。和使用if的分支結(jié)構(gòu)不同,它只能針對某個表達式的值做出判斷,從而決定程序執(zhí)行哪一段代碼。switch多分支結(jié)構(gòu)的具體語法格式如下:switch(表達式){case目標(biāo)值1:

執(zhí)行語句1break;case目標(biāo)值2:

執(zhí)行語句2break;…case目標(biāo)值n:

執(zhí)行語句nbreak;default:

執(zhí)行語句n+1;break;}3.2.4switch多分支結(jié)構(gòu)在上面的語法格式中,switch多分支結(jié)構(gòu)將表達式的值與每個case后的目標(biāo)值進行匹配,如果找到了匹配的目標(biāo)值,會執(zhí)行對應(yīng)的執(zhí)行語句。switch多分支結(jié)構(gòu)的使用說明如下。1.switchswitch關(guān)鍵字表示“開關(guān)”,其后面的表達式的值可以是byte、short、int和char型,JDK1.7及以后的版本中表達式的值也可以是String型。2.casecase后是一個與switch表達式的值相對應(yīng)的常量,case語句可以有多個,且順序可以改變,當(dāng)switch表達式的值與case后面的常量相等時,其后的代碼塊將會被執(zhí)行。3.2.4switch多分支結(jié)構(gòu)3.default當(dāng)case后面的常量與switch表達式的值都不相等時,就會執(zhí)行default語句,default語句通常放在switch多分支結(jié)構(gòu)末尾,可省略不寫。為了增強程序的容錯性,建議讀者在編寫程序時使用該語句,養(yǎng)成規(guī)范化、標(biāo)準(zhǔn)化的代碼編寫習(xí)慣。4.breakbreak的作用是跳出當(dāng)前的switch多分支結(jié)構(gòu)。如果沒有break語句,其后的case語句也將被一一執(zhí)行。3.2.4switch多分支結(jié)構(gòu)【例3-4】使用1~7來表示星期一到星期日,根據(jù)輸入的數(shù)字來輸出對應(yīng)中文格式的星期值。【例題分析】在switch語句中,可以使用switch關(guān)鍵字來描述一個表達式,使用case關(guān)鍵字來描述和表達式匹配的目標(biāo)值。當(dāng)表達式的值和某個目標(biāo)值匹配時,會執(zhí)行對應(yīng)case語句下的語句。3.2.4switch多分支結(jié)構(gòu)【程序?qū)崿F(xiàn)】importjava.util.Scanner;publicclassExample3_4{publicstaticvoidmain(String[]args){System.out.println("請輸入一個數(shù)字(1~7):");Scannerinput=newScanner(System.in);intweek=input.nextInt();switch(week){case1:System.out.println("星期一");break;case2:System.out.println("星期二");break;case3:System.out.println("星期三");break;3.2.4switch多分支結(jié)構(gòu)case4:System.out.println("星期四");break;case5:System.out.println("星期五");break;case6:System.out.println("星期六");break;case7:System.out.println("星期日");break;default:System.out.println("輸入的數(shù)字不正確");break;}}}3.2.5分支結(jié)構(gòu)的嵌套分支結(jié)構(gòu)的嵌套就是指在分支結(jié)構(gòu)的子句中又包含一個或多個分支結(jié)構(gòu),這樣的結(jié)構(gòu)一般用在比較復(fù)雜的程序中,例如下面的分支嵌套結(jié)構(gòu):if(判斷條件1){if(判斷條件2){

執(zhí)行語句1}else{

執(zhí)行語句2}}else{if(判斷條件3){

執(zhí)行語句3}else{

執(zhí)行語句4}}3.2.5分支結(jié)構(gòu)的嵌套上面的分支嵌套結(jié)構(gòu)如圖3-7所示。圖3-7分支嵌套結(jié)構(gòu)3.2.5分支結(jié)構(gòu)的嵌套【例3-5】判斷用戶給定的年份是閏年還是平年。【例題分析】閏年(leapyear)是為了彌補因人為歷法規(guī)定造成的年度天數(shù)與地球?qū)嶋H公轉(zhuǎn)周期的時間差而設(shè)立的。補上時間差的年份為閏年。閏年共有366天(1月~12月分別為31天、29天、31天、30天、31天、30天、31天、31天、30天、31天、30天、31天)。閏年可分為世紀(jì)閏年和普通閏年,1582年以來的置閏規(guī)則如下。世紀(jì)閏年:公歷年份是整百數(shù)的,且必須是400的倍數(shù)才是世紀(jì)閏年(如1900年不是閏年,2000年是世紀(jì)閏年)。普通閏年:公歷年份是4的倍數(shù),且不是100的倍數(shù)的,為普通閏年(如2004年、2020年等就是普通閏年)。3.2.5分支結(jié)構(gòu)的嵌套【程序?qū)崿F(xiàn)】importjava.util.Scanner;publicclassExample3_5{publicstaticvoidmain(String[]args){System.out.println("請輸入一個年份:");Scannerinput=newScanner(System.in);intyear=input.nextInt();if(year%400==0){System.out.println(year+"是閏年。");}else{if(year%4==0&&year%100!=0){System.out.println(year+"是閏年。");}elseSystem.out.println(year+"不是閏年。");}}}任務(wù)實踐3-2分時問候【任務(wù)描述】按照人們的生活習(xí)慣,一般粗略地把一天分為表3-1所示的幾個時間?段。在不同的時間段,人們之間的問候也是不同的。請根據(jù)用戶輸入的時間,編程實現(xiàn)分時問?候?!救蝿?wù)分析】用戶輸入的時間不同,程序要給出的問候也不同,即存在多種選擇或分支的情況。因此,可以使用分支結(jié)構(gòu)來實現(xiàn)分時問候的程?序。時間段[0,6][6,9][9,12][14,18][18,22][22,24]含義凌晨早晨上午下午晚上深夜表3-1一天中的時間段劃分任務(wù)實踐3-3簡單計算器【任務(wù)描述】編寫一個簡單計算器程序,實現(xiàn)指定數(shù)據(jù)的加法、減法、乘法、除法運算。程序執(zhí)行后,輸出數(shù)據(jù)執(zhí)行相應(yīng)運算后的結(jié)果。簡單計算器的效果如圖3-8所?示?!救蝿?wù)分析】加法、減法、乘法、除法是程序中常用的4種算術(shù)運算,用戶可以通過輸入數(shù)據(jù)與算術(shù)運算符“+”“-”“*”“/”構(gòu)建算術(shù)表達式來實現(xiàn)。程序根據(jù)用戶的輸入進行運算選擇,從而得到運算結(jié)?果。圖3-8簡單計算器效果目錄CONTENTS任務(wù)3.1了解程序的基本結(jié)構(gòu)任務(wù)3.2分支結(jié)構(gòu)任務(wù)3.3循環(huán)結(jié)構(gòu)和跳轉(zhuǎn)語句任務(wù)3.4方法項目實施

猜數(shù)字游戲項目實訓(xùn)

剪刀、石頭、布循環(huán)結(jié)構(gòu)是在滿足一定條件下使某一段代碼重復(fù)執(zhí)行的結(jié)構(gòu),被重復(fù)執(zhí)行的代碼稱為循環(huán)體。Java中提供了3種常用的循環(huán)結(jié)構(gòu),分別是while循環(huán)、do-while循環(huán)和for循環(huán),下面分別對這3種循環(huán)結(jié)構(gòu),以及改變循環(huán)執(zhí)行流程的break、continue語句進行介紹。任務(wù)3.3循環(huán)結(jié)構(gòu)和跳轉(zhuǎn)語句3.3.1while循環(huán)while循環(huán)與3.2節(jié)講到的分支結(jié)構(gòu)有些相似,根據(jù)循環(huán)條件來決定是否執(zhí)行花括號內(nèi)的執(zhí)行語句。區(qū)別在于,while循環(huán)會反復(fù)地進行條件判斷,只要循環(huán)條件成立,執(zhí)行語句就會執(zhí)行,直到循環(huán)條件不成立,while循環(huán)結(jié)束。while循環(huán)的語法格式如下:在上面的語法格式中,執(zhí)行語句被稱作循環(huán)體,循環(huán)體是否執(zhí)行取決于循環(huán)條件。當(dāng)循環(huán)條件為true時,就會執(zhí)行循環(huán)體。循環(huán)體執(zhí)行完畢會繼續(xù)判斷循環(huán)條件,如果循環(huán)條件仍為true,則會繼續(xù)執(zhí)行,直到循環(huán)條件為false,整個循環(huán)過程才會結(jié)束。while(循環(huán)條件){

執(zhí)行語句}3.3.1while循環(huán)while循環(huán)如圖3-9所示。圖3-9while循環(huán)3.3.1while循環(huán)【例3-6】利用while循環(huán),計算1~100的和。【例題分析】這是典型的“累加和”問題。這里要計算“1+2+…+100”的值,可以用i表示下一個要加的數(shù),用sum表示累加和,然后利用while循環(huán)來求累加和,當(dāng)i的值超過100時,循環(huán)結(jié)束。3.3.1while循環(huán)【程序?qū)崿F(xiàn)】publicclassExample3_6{publicstaticvoidmain(String[]args){inti=1,sum=0;while(i<=100){sum+=i;i++;}System.out.println("1~100的和為:"+sum);}}任務(wù)實踐3-4判斷一個數(shù)是否是素數(shù)【任務(wù)描述】素數(shù)也稱質(zhì)數(shù),是指在大于1的自然數(shù)中,除了1和它本身不能被其他自然數(shù)整除的數(shù)。編寫程序,判斷一個數(shù)是否是素?數(shù)?!救蝿?wù)分析】用戶輸入一個自然數(shù)num,遍歷從2~num-1的所有整數(shù),如果存在一個數(shù)能夠被num整除,則num不是素數(shù);如果遍歷結(jié)束,找不到一個數(shù)能被num整除,則可以判斷num是素?數(shù)。3.3.2do-while循環(huán)do-while循環(huán)和while循環(huán)功能類似,其語法格式如下:在上面的語法格式中,關(guān)鍵字do后面的執(zhí)行語句是循環(huán)體。do-while循環(huán)將循環(huán)條件放在了循環(huán)體的后面,這就意味著,循環(huán)體會無條件執(zhí)行一次,然后根據(jù)循環(huán)條件來決定是否繼續(xù)執(zhí)行。do-while循環(huán)如圖3-10所示。do{

執(zhí)行語句}while(循環(huán)條件);圖3-10do-while循環(huán)3.3.2do-while循環(huán)【例3-7】利用do-while循環(huán),計算1~100的和?!纠}分析】利用do-while循環(huán)計算累加和,需要將循環(huán)體放到循環(huán)條件之前,先執(zhí)行循環(huán)體,再進行循環(huán)條件的判斷,直到i超過100時停止循環(huán)。3.3.2do-while循環(huán)【程序?qū)崿F(xiàn)】publicclassExample3_7{publicstaticvoidmain(String[]args){inti=1,sum=0;do{sum+=i;i++;}while(i<=100);System.out.println("1~100的和為:"+sum);}}3.3.2do-while循環(huán)我們分別利用while循環(huán)和do-while循環(huán)實現(xiàn)了計算1~100的值,那么,這兩種循環(huán)結(jié)構(gòu)有什么區(qū)別呢?下面通過實例來介紹while循環(huán)與do-while循環(huán)的區(qū)別?!纠?-8】在下面的程序中分別編寫了while循環(huán)與do-while循環(huán)兩種循環(huán)結(jié)構(gòu),請分析這兩種循環(huán)結(jié)構(gòu)的執(zhí)行結(jié)果,體會其區(qū)別。publicclassExample3_8{publicstaticvoidmain(String[]args){intnumber=100;while(number==60){System.out.println("執(zhí)行while循環(huán)");}do{System.out.println("執(zhí)行do-while循環(huán)");}while(number==60);}}3.3.2do-while循環(huán)從運行結(jié)果可以看出,在while循環(huán)中,由于條件表達式的值為false,因此沒有執(zhí)行循環(huán)體中的內(nèi)容;而在do-while循環(huán)中,先執(zhí)行一遍循環(huán)體,再判斷條件表達式的值。因此,在同樣的循環(huán)條件下,while循環(huán)與do-while循環(huán)的運行結(jié)果是不同的。3.3.3for循環(huán)for循環(huán)是Java程序設(shè)計中最常用的循環(huán)結(jié)構(gòu)之一,一般用在循環(huán)次數(shù)已知的情況下。for循環(huán)的語法格式如下:for(初始化表達式;循環(huán)條件;操作表達式){

執(zhí)行語句}在上面的語法格式中,for關(guān)鍵字后面圓括號中包括3部分——初始化表達式、循環(huán)條件和操作表達式,它們之間用分號分隔,花括號中的執(zhí)行語句為循環(huán)體。3.3.3for循環(huán)接下來分別用①表示初始化表達式、②表示循環(huán)條件、③表示操作表達式、④表示循環(huán)體,通過序號來具體分析for循環(huán)的執(zhí)行流程。具體如下。for(①;②;③){④}第1步,執(zhí)行①。第2步,執(zhí)行②。如果判斷結(jié)果為true,執(zhí)行第3步;如果判斷結(jié)果為false,執(zhí)行第5步。第3步,執(zhí)行④。第4步,執(zhí)行③,然后重復(fù)執(zhí)行第2步。第5步,退出循環(huán)。3.3.3for循環(huán)for循環(huán)如圖3-11所示。圖3-11for循環(huán)3.3.3for循環(huán)【例3-9】利用for循環(huán),計算1~100的和?!纠}分析】利用for循環(huán)求累加和,可以將初始化語句、循環(huán)條件、操作表達式緊密地組織在一起,程序結(jié)構(gòu)簡潔、明了?!境绦?qū)崿F(xiàn)】publicclassExample3_9{publicstaticvoidmain(String[]args){intsum=0;for(inti=1;i<=100;i++){sum+=i;}System.out.println("1~100的和為:"+sum);}}3.3.3for循環(huán)綜合分析Java實現(xiàn)循環(huán)的3種結(jié)構(gòu),while和do-while循環(huán)在循環(huán)次數(shù)未知的情況下更常使用,for循環(huán)在循環(huán)次數(shù)已知的情況下編寫程序更容易。但無論使用哪種循環(huán)結(jié)構(gòu),要注意正確的語法格式和編碼規(guī)范。例如,Java語句的結(jié)束標(biāo)志是分號,有的讀者濫用分號,造成了循環(huán)的不正確執(zhí)行。3.3.3for循環(huán)代碼塊1:inti,sum=0;for(i=1;i<=100;i++){sum+=i;}System.out.println(sum);代碼塊2:inti,sum=0;for(i=1;i<=100;i++);{sum+=i;}System.out.println(sum);3.3.3for循環(huán)代碼塊1的執(zhí)行結(jié)果是5050,而代碼塊2的執(zhí)行結(jié)果是101。對比兩個代碼塊的不同之處可以發(fā)現(xiàn),代碼塊2的for語句后使用了分號。讀者在編寫程序時要養(yǎng)成測試的習(xí)慣,做到細致認真、精益求精,養(yǎng)成良好的編碼習(xí)慣。任務(wù)實踐3-5查找水仙花數(shù)【任務(wù)描述】水仙花數(shù)是指個位、十位和百位上3個數(shù)的立方和等于這個三位數(shù)本身的數(shù)(如153=13+53+33),編寫程序求出所有的水仙花?數(shù)?!救蝿?wù)分析】(1)通過循環(huán)遍歷所有的三位數(shù);(2)獲取百位、十位、個位上的數(shù)字;(3)利用if語句判斷百位、十位、個位上的數(shù)字的立方和是否與原數(shù)字相等,判斷該數(shù)是不是水仙花?數(shù)。3.3.4break和continue語句1.break語句在前面介紹switch多分支結(jié)構(gòu)時已經(jīng)使用過break語句,用break語句跳出當(dāng)前的switch多分支結(jié)構(gòu),終止下面case語句的執(zhí)行。實際上,break語句還可以應(yīng)用在for、while和do-while循環(huán)中,用于強行退出本層循環(huán),也就是忽略循環(huán)體中任何其他語句和循環(huán)條件。break和continue語句用于實現(xiàn)循環(huán)過程中程序流程的跳轉(zhuǎn),下面對這兩種跳轉(zhuǎn)語句進行詳細介紹。3.3.4break和continue語句【例3-10】累加計算1+2+3+4+…+100,當(dāng)累加值超過1000時,停止累加?!纠}分析】在求累加和的過程中,需要判斷累加和是否超過1000,如果超過1000,則利用break語句跳出循環(huán)。3.3.4break和continue語句【程序?qū)崿F(xiàn)】publicclassExample3_10{publicstaticvoidmain(String[]args){intsum=0;for(inti=1;i<=100;i++){sum+=i;if(sum>1000){System.out.println("i="+i+"sum="+sum);break;}}}}3.3.4break和continue語句2.continue語句continue語句只能應(yīng)用在for、while和do-while循環(huán)中,用于讓程序直接跳過其后面的語句,進行下一次循環(huán)。【例3-11】對1~100的奇數(shù)進行求和?!纠}分析】求1~100之內(nèi)所有奇數(shù)的累加和,在循環(huán)過程中需要對數(shù)據(jù)的奇偶性進行判斷,如果數(shù)據(jù)為偶數(shù),則跳過本次循環(huán),進行下一次循環(huán)。3.3.4break和continue語句【程序?qū)崿F(xiàn)】publicclassExample3_11{publicstaticvoidmain(String[]args){intsum=0;for(inti=1;i<=100;i++){if(i%2==0)continue;sum+=i;}System.out.println("1~100內(nèi)所有奇數(shù)的和為"+sum);}}3.3.5循環(huán)結(jié)構(gòu)的嵌套1.while循環(huán)嵌套while循環(huán)while循環(huán)體中可以包含另外一個while循環(huán)語句,如下所示。循環(huán)結(jié)構(gòu)的嵌套是指一個循環(huán)體內(nèi)又包含另一個循環(huán)結(jié)構(gòu)。嵌套在內(nèi)部的循環(huán)體中還可以嵌套循環(huán)結(jié)構(gòu),這就構(gòu)成了多重循環(huán)。嵌套的層數(shù)不要過多,嵌套層數(shù)過多會使程序變得不容易讀懂。3種循環(huán)結(jié)構(gòu)可以相互嵌套,如下面幾種循環(huán)嵌套的形式。while(循環(huán)條件1){…

while(循環(huán)條件2){…}}3.3.5循環(huán)結(jié)構(gòu)的嵌套2.while循環(huán)嵌套for循環(huán)while循環(huán)體中也可以包含一個for循環(huán)語句,如下所示。while(循環(huán)條件1){…for(初始化表達式1;循環(huán)條件2;操作表達式1){…}}3.3.5循環(huán)結(jié)構(gòu)的嵌套3.for循環(huán)嵌套for循環(huán)for循環(huán)體中可以包含另外一個for循環(huán)語句,如下所示。for(初始化表達式1;循環(huán)條件1;操作表達式1){for(初始化表達式2;循環(huán)條件2;操作表達式2){…}}3.3.5循環(huán)結(jié)構(gòu)的嵌套【例3-12】輸出圖3-12所示的圖形。圖3-12例3-12效果【例題分析】圖3-12中為5行5列的星號矩形,可以利用兩層循環(huán)嵌套來進行輸出控制,外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列數(shù)。3.3.5循環(huán)結(jié)構(gòu)的嵌套【程序?qū)崿F(xiàn)】publicclassExample3_12{publicstaticvoidmain(String[]args){for(inti=1;i<=5;i++){for(intj=1;j<=5;j++){System.out.print("*");}System.out.println();}}}3.3.5循環(huán)結(jié)構(gòu)的嵌套【例3-13】輸出圖3-13所示的圖形。圖3-13例3-13效果【例題分析】圖3-13中為5行星號三角形,每一行的星號個數(shù)雖然不同但是很有規(guī)律,第n行正好有n個星號,因此可以利用兩層循環(huán)嵌套來進行輸出控制,外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制每行的星號個數(shù)。3.3.5循環(huán)結(jié)構(gòu)的嵌套【程序?qū)崿F(xiàn)】publicclassExample3_12{publicstaticvoidmain(String[]args){for(inti=1;i<=5;i++){for(intj=1;j<=i;j++){System.out.print("*");}System.out.println();}}}任務(wù)實踐3-6九九乘法表【任務(wù)描述】輸出九九乘法表,如圖3-14所?示?!救蝿?wù)分析】觀察圖3-14可以得出規(guī)律:總共有9行,第幾行就有幾個表達式。同時要注意每行表達式的規(guī)律:在第i行中,表達式從1×i開始,一直到i×i結(jié)束,共有i個表達式。這個規(guī)律可以通過循環(huán)實現(xiàn)。因此,可以通過循環(huán)嵌套來控制輸出,外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列數(shù)。同時,還需要注意內(nèi)層循環(huán)和外層循環(huán)之間的聯(lián)系,內(nèi)層循環(huán)的列數(shù)是與外層循環(huán)的行數(shù)相關(guān)?的。圖3-14九九乘法表效果目錄CONTENTS任務(wù)3.1了解程序的基本結(jié)構(gòu)任務(wù)3.2分支結(jié)構(gòu)任務(wù)3.3循環(huán)結(jié)構(gòu)和跳轉(zhuǎn)語句任務(wù)3.4方法項目實施

猜數(shù)字游戲項目實訓(xùn)

剪刀、石頭、布任務(wù)3.4方法1.方法的定義與調(diào)用方法就是一段可以重復(fù)調(diào)用的代碼。例如,有某段長度約100行的代碼,要在多個地方使用此段代碼,如果在各個地方都重復(fù)編寫此段代碼,肯定會比較麻煩,所以此時可以將此段代碼定義成一個方法,以供程序反復(fù)調(diào)用。方法是Java中已命名的代碼塊,如我們在前面一直使用的main()方法。在其他編程語言中,這個代碼塊也稱為函數(shù)。方法是程序的重要組成部分,利用方法可以更好地實現(xiàn)代碼的重用操作。下面將對方法的定義與相關(guān)使用方法進行介紹。任務(wù)3.4方法在Java中,定義一個方法的具體語法格式如下:修飾符返回值類型方法名([參數(shù)類型參數(shù)名1,參數(shù)類型參數(shù)名2,…]){

執(zhí)行語句

…[return返回值;]}任務(wù)3.4方法對于上面的語法格式的具體說明如下。(1)修飾符:方法的修飾符比較多,有對訪問權(quán)限進行限定的,有靜態(tài)修飾符static,還有最終修飾符final等。(2)返回值類型:用于限定方法返回值的數(shù)據(jù)類型。(3)參數(shù)類型:用于限定調(diào)用方法時傳入?yún)?shù)的數(shù)據(jù)類型。(4)參數(shù)名:是一個變量,用于接收調(diào)用方法時傳入的數(shù)據(jù)。(5)return關(guān)鍵字:用于結(jié)束方法以及返回方法指定類型的值。(6)返回值:被return語句返回的值,該值會返回給調(diào)用者。任務(wù)3.4方法注意方法中的“參數(shù)類型參數(shù)名1,參數(shù)類型參數(shù)名2,…”稱作參數(shù)列表,可用于描述方法在被調(diào)用時需要接收的參數(shù)。如果方法不需要接收任何參數(shù),則參數(shù)列表為空,即圓括號內(nèi)不寫任何內(nèi)容。方法的返回值的類型必須為方法聲明的返回值類型,如果方法沒有返回值,返回值類型要聲明為void,此時,方法中的return語句可以省略。任務(wù)3.4方法方法定義以后即可被調(diào)用。在類內(nèi)部的方法調(diào)用很簡單,只需要給出方法名以及方法的參數(shù)(一般稱作實參)列表即可。如果方法有返回值,則可將返回值賦給相應(yīng)類型的變量。其中實參列表的參數(shù)要與方法中參數(shù)(一般稱作形參)列表的參數(shù)個數(shù)一致、類型兼容。調(diào)用時,程序執(zhí)行流程在主調(diào)方法中中斷,轉(zhuǎn)入被調(diào)方法,同時實參的值傳遞給形參,遇到return語句或者被調(diào)方法執(zhí)行結(jié)束后則回到主調(diào)方法的斷點處繼續(xù)執(zhí)行。任務(wù)3.4方法【例3-14】輸出圖3-14所示的圖形。【例題分析】圖3-14所示為3個行數(shù)、列數(shù)不同的矩形,如果把輸出矩形的代碼寫3遍,會產(chǎn)生代碼重復(fù)問題,因此可以將輸出矩形的功能定義為方法,在程序中調(diào)用3次。圖3-14例3-14效果任務(wù)3.4方法【程序?qū)崿F(xiàn)】publicclassExample3_14{publicstaticvoidmain(String[]args){printRectangle(3,5);printRectangle(2,4);printRectangle(6,10);}publicstaticvoidprintRectangle(intheight,intwidth){for(inti=0;i<height;i++){for(intj=0;j<width;j++){System.out.print("*");}System.out.println();}System.out.println();}}任務(wù)3.4方法【例3-15】編寫方法實現(xiàn)求x的n次方(n為正整數(shù))?!纠}分析】根據(jù)方法的定義規(guī)則,自定義方法需要接收兩個參數(shù),返回一個結(jié)果。任務(wù)3.4方法【程序?qū)崿F(xiàn)】publicclassExample3_15{staticdoublepower(doublex,doublen){doublet=1;for(inti=1;i<=n;i++)t=t*x;returnt;}publicstaticvoidmain(String[]args){doublet1=power(1.01,365);doublet2=power(0.99,365);System.out.printf("%.2f\n",t1);System.out.printf("%.2f",t2); }任務(wù)3.4方法上面的程序?qū)崿F(xiàn)了求x的n次方。當(dāng)n=365時,x分別為1.01和0.99這兩個接近的數(shù)據(jù),它們的運算結(jié)果卻有天壤之別。每天進步一點,365天后就會迎來質(zhì)的飛躍。正如荀子在《勸學(xué)》中所講的,“故不積跬步,無以至千里;不積小流,無以成江海?!睂W(xué)習(xí)程序設(shè)計也是如此,日積月累的努力,終將成就精彩人生。任務(wù)3.4方法2.遞歸遞歸調(diào)用是指一個方法在它的執(zhí)行語句內(nèi)調(diào)用其自身,Java語言允許方法的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)方法也是被調(diào)方法。【例3-16】使用遞歸法求n的階乘?!纠}分析】n!是指自然數(shù)n的階乘,即:n!=1×2×3×…×(n-2)×(n-1)×n。一個數(shù)n的階乘可表示為:任務(wù)3.4方法【程序?qū)崿F(xiàn)】publicclassExample3_16{staticlongf(intn){if(n==1||n==0)return1;elsereturnn*f(n-1);}publicstaticvoidmain(String[]args){intn=5;longk=f(n);System.out.println(n+"!="+k);}}任務(wù)3.4方法經(jīng)過方法的層層嵌套調(diào)用,最終遇到f(

溫馨提示

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

評論

0/150

提交評論