Java面向對象程序設計(第二版)課件第5章-基本控制結構與實現(xiàn)_第1頁
Java面向對象程序設計(第二版)課件第5章-基本控制結構與實現(xiàn)_第2頁
Java面向對象程序設計(第二版)課件第5章-基本控制結構與實現(xiàn)_第3頁
Java面向對象程序設計(第二版)課件第5章-基本控制結構與實現(xiàn)_第4頁
Java面向對象程序設計(第二版)課件第5章-基本控制結構與實現(xiàn)_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章基本控制結構與實現(xiàn)教學內容選擇結構程序設計循環(huán)結構程序設計控制轉移語句遞歸算法及其應用教學目標理解程序控制結構根據程序需要設計合理的布爾表達式掌握選擇語句和循環(huán)語句的語法結構應用選擇語句、循環(huán)語句實現(xiàn)選擇結構、循環(huán)結構的程序設計掌握break語句、continue語句和return語句實現(xiàn)程序執(zhí)行流程的轉移具備初步描述算法的能力5.1引例(一)例5.1計算任意兩個整數(shù)的乘積。分析:要計算任意兩個整數(shù)的乘積,需要從鍵盤輸入兩個整數(shù)。從鍵盤輸入數(shù)據的方法很多,此程序中應用Java輸入輸出流中的BufferedReader及InputStreamReader類聲明并創(chuàng)建字符輸入流對象,應用readLine()方法獲得一個字符串,要使用Integer類中的parseInt方法將字符串轉換為整型。關于Java輸入輸出流的詳細應用請參考第10章。程序源代碼如下:例5.1程序源代碼例5.1程序說明以上Java程序是按照書寫的順序,從第一條語句順序執(zhí)行到最后一條語句。這種R程序結構稱之為“順序結構”。不是所有的問題都能通過順序執(zhí)行解決的,例如有這樣的問題:判斷某個學生的成績是否及格?首先要設定一個及格分數(shù)線(假定60分是及格分數(shù)線),如果某個學生的成績大于或等于60分,則該學生成績及格,否則不及格,這類問題采用選擇結構可以解決。在許多實際問題中,經常遇到具有規(guī)律性的重復運算,因此在程序設計中就需要將某些語句重復執(zhí)行,這種重復處理的過程采用另一種重要的基本結構——循環(huán)結構可以實現(xiàn)。5.1引例(二)例5.2編寫程序,判斷某個學生的成績是否及格分析:上述問題實際分兩種情況:及格或不及格,應用選擇結構中的if…else語句可以解決此類問題。設計if布爾表達式score>=60,若其值為true,則成績及格,否則成績不及格。程序源代碼如下:例5.2程序源代碼程序運行結果如下:67.0及格!5.1引例(三)例5.3計算s=1+2+3+…+10。分析:上述問題可以用迭代方法實現(xiàn),迭代法也稱輾轉法,是一種不斷用變量的舊值遞推新值的過程。如s=0+1,s=1+2,s=3+3,s=6+4…,這里,我們總是用前一次計算的和s作為下一次的一個加數(shù)進行累加,那么,在程序中是否要使用10個表達式來求和呢?顯然是不可取的,可以在程序設計中用一種循環(huán)結構來實現(xiàn)這種重復操作。以下程序中,應用循環(huán)語句中的for(inti=1;i<=10;i++)控制i的值分別取1、2、3、…、10,i的值每變化一次,都執(zhí)行語句s=s+i;執(zhí)行10次,每次總是用前一次的值s與i累加。程序源代碼如下:例5.3程序源代碼程序運行結果如下:1+2+3+...+10=55程序總結以上案例中分別應用了程序設計中的三種基本結構:順序結構、選擇結構和循環(huán)結構。在解決具體問題時,通常采用選擇語句、循環(huán)語句實現(xiàn)上述三種結構的程序設計,實現(xiàn)相應的算法。順序結構程序的執(zhí)行完全按照程序書寫順序執(zhí)行,是最簡單的一種基本結構。在前面的章節(jié)中,程序的結構采用的基本上是順序結構,下面將詳細介紹選擇結構和循環(huán)結構的編程方法。5.2選擇語句選擇語句用于判斷給定的條件是否滿足(條件值為true或false),以決定執(zhí)行某個分支程序段。Java有幾種類型的選擇語句:單分支if語句、雙分支if…else語句、嵌套if語句、if…elseif語句、多分支switch語句等。5.2.1單分支if語句單分支if語句格式如下:if(布爾表達式){語句塊;}程序執(zhí)行流程圖如圖5-1所示。執(zhí)行過程是,如果布爾表達式值為true,則執(zhí)行語句塊,否則,不執(zhí)行語句塊,程序執(zhí)行流程轉移到if后面的語句。如:if(x>0) y=1;表示當x>0的值為true時,執(zhí)行語句“y=1;”。布爾表達式語句塊語句truefalse說明(1)布爾表達式可以是布爾類型的常量、變量、關系表達式或邏輯表達式等,如果是其他類型,則編譯出錯。布爾表達式必須寫在()中(2)語句塊的語句可以是Java中的任何語句,若只有一條語句,可以省略{},若為復合語句,則必須使用{}說明(續(xù))例如,定義intx=-5;,在以下兩個程序段中,x>0的值為false,if語句塊均不執(zhí)行。程序段一inty=0;if(x>0)y=1;System.out.println("y="+y);程序段二inty=0;if(x>0){y=1;System.out.println("y="+y);}在程序段一中,單語句y=1;為if語句塊,該語句不執(zhí)行;y的值仍然為0,跳出if語句后執(zhí)行輸出語句,輸出結果為:y=0在程序段二中沒有輸出結果,{y=1;System.out.println("y="+y);}為if語句塊,輸出語句不執(zhí)行。單分支if語句示例例5.4從鍵盤輸入一個整數(shù),判斷該整數(shù)是否是偶數(shù)。分析:判斷輸入的整數(shù)是否能被2整除,設置判斷的布爾表達式為num%2==0。若條件成立,則輸出提示信息。程序源代碼如下:例5.4程序源代碼5-2例5.2輸入對話框程序運行后首先出現(xiàn)如圖5-2所示的對話框,如果輸入240,則輸出“240是偶數(shù)?!?。5.2.2雙分支if…else語句單分支if語句在指定條件為true時執(zhí)行語句,否則不執(zhí)行任何操作。如果要執(zhí)行雙選擇操作,可以應用雙分支if…else語句來實現(xiàn)。if…else語句的格式如下:if(布爾表達式) {語句塊1;}else {語句塊2;}程序執(zhí)行流程圖如圖5-3所示。執(zhí)行過程是,如果布爾表達式值為true,執(zhí)行語句塊1;否則執(zhí)行語句塊2。布爾表達式語句塊1語句truefalse

語句塊25.2.2雙分支if…else語句(續(xù))例如,下面求絕對值的函數(shù)可以用以下的程序段實現(xiàn):if(x>=0)y=x;elsey=-x;注意:以上函數(shù)也可以用第2章的條件表達式實現(xiàn):y=(x>=0)?x:―xy=x(x>=0)-x(x<0)雙分支if…else語句示例例5.5用Math類的random()方法產生一個0~1之間的一個實數(shù),若該數(shù)大于或等于0.5,則輸出“num>=0.5”,否則輸出“num<0.5”。分析:random()方法產生的隨機數(shù)在0.0和1.0之間。判斷該數(shù)是否大于或等于0.5,此處設置判斷的布爾表達式為num>=0.5。若布爾表達式值為true,則輸出“nmu>=0.5”,否則,即布爾表達式值為false,則輸出“num<0.5”。程序源代碼如下:例5.5程序源代碼5.2.3嵌套if語句if語句或if…else語句中的語句塊可以是任何合法的Java語句,包括if或if…else語句。我們稱之為嵌套if語句。嵌套可以一層一層展開,原則上沒有深度的限制。但是,嵌套的層數(shù)不宜過多。例如,下面就是一個嵌套的if語句。if(score1>80){if(score2>80)System.ou.println("score1和score2都大于80。");elseSystem.ou.println("score1大于80,score2小于或等于80。");}5.2.3嵌套if語句(續(xù))嵌套的if語句可以實現(xiàn)多重選擇。例如下面的程序段,要求根據加、減、乘、除運算符計算表達式的值。intx=5,y=4,z; charch='+';if(ch=='+')

z=x+y;elseif(ch=='-')

z=x-y;elseif(ch=='*')

=x*y;else(ch=='/')

z=x/y;System.out.println(z);5.2.3嵌套if語句(續(xù))這個程序段的執(zhí)行過程是,從第一個if語句開始依次判斷布爾表達式的值,當出現(xiàn)某個值為true時,則執(zhí)行其對應的語句;如果所有的布爾表達式的值為false,則執(zhí)行else后的語句。只要一個條件滿足,執(zhí)行相應語句后if語句就結束,而不再對后面的布爾表達式進行判斷。如當前運算符是“+”,則進行加法運算。以上if…elseif語句可以實現(xiàn)多重條件選擇。5.2.4switch語句過多使用嵌套的if語句,會增加程序閱讀的困難,Java提供了switch語句來實現(xiàn)多重條件選擇。switch語句根據表達式(整型或字符型)的值來選擇執(zhí)行多分支語句,一般格式如下:switch(整型或字符型表達式){case常量表達式1:語句序列;[break;]case常量表達式2:語句序列;[break;]….case常量表達式N:語句序列;[break;][default:語句序列;] }執(zhí)行過程是,計算整型或字符型表達式的值,并依次與case后的常量表達式值相比較,當兩者值相等時,即執(zhí)行其后的語句。switch語句說明(1)整型或字符型表達式必須為byte、short、int或char類型。(2)每個case語句后的常量表達式值必須是與表達式類型兼容的一個常量(它必須為一個常量,而不是變量),重復的case值是不允許的。(3)關鍵字break為可選項,放在case語句的末尾。執(zhí)行此語句后,將終止當前switch語句。若沒有break語句,將繼續(xù)執(zhí)行下面的case語句,直到switch語句結束或者遇到break語句。(4)default為可選項。當指定的常量表達式都不能與switch表達式的值匹配時,將選擇執(zhí)行default后的語句序列。case語句和default語句次序無關,但習慣上將default語句放在最后。switch語句示例例5.6將以上根據加、減、乘、除運算符計算表達式值的問題用switch語句實現(xiàn)。分析:從鍵盤輸入運算符所引用的類和例5.1相同,方法read()的功能是從輸入流中讀取一個字節(jié)的數(shù)據。程序源代碼如下:例5.6程序源代碼5.3循環(huán)語句循環(huán)結構是程序設計中實現(xiàn)重復操作的一種結構。其特點是,在給定條件成立時,反復執(zhí)行某程序段,直到條件不成立終止。給定的條件稱為循環(huán)條件,反復執(zhí)行的程序段稱為循環(huán)體。Java提供了三種形式的循環(huán)結構:while循環(huán)、do….while循環(huán)以及for循環(huán)。5.3.1while循環(huán)while循環(huán)又稱當型循環(huán),它的格式如下:while(布爾表達式){循環(huán)體;}執(zhí)行過程是,判斷布爾表達式的值,當其為true時,執(zhí)行循環(huán)體;當布爾表達式的值為false時,循環(huán)結束。while循環(huán)的程序執(zhí)行流程如圖5-4所示。falsetrue布爾表達式

循環(huán)體下一條語句

圖5-4while循環(huán)程序執(zhí)行流程圖5.3.1while循環(huán)(續(xù))例如,以下程序段在同一行輸出10個A。inti=1;while(i<=10){System.out.print("A");i++;}以上程序段的循環(huán)條件是布爾表達式i<=10,循環(huán)體是{}中兩條語句。程序段執(zhí)行時根據i的值判斷i<=10的值為true,則執(zhí)行循環(huán)體;否則退出循環(huán)。循環(huán)體被執(zhí)行10次,當i=11時,退出循環(huán)。while循環(huán)說明(1)若循環(huán)體語句為單語句,{}可以省略。否則,不能省略{}。(2)若首次執(zhí)行時循環(huán)條件為false,則循環(huán)體一次也不執(zhí)行;若循環(huán)條件永為true,則循環(huán)體一直執(zhí)行,稱為死循環(huán)。在循環(huán)體中應包含使循環(huán)結束的語句,以避免死循環(huán)。(3)允許while語句的循環(huán)體又是while語句,從而形成循環(huán)的嵌套。while循環(huán)示例例5.7計算1-2+3-4...-100。分析:一組有規(guī)律的數(shù)據的計算一般都用循環(huán)程序來解決。程序中定義整型變量sum和i,其中sum用于存放和,初值為0,i用做循環(huán)控制變量及其第二個加數(shù),初值為1。該算式中奇數(shù)項是加法,偶數(shù)項是減法,可以給第二個加數(shù)乘以標志變量來實現(xiàn)各項運算符的變化。程序源代碼如下:例5.7程序源代碼程序運行結果如下:1-2+3-4...-100=-505.3.2do-while循環(huán)do-while循環(huán)語句的特點是先執(zhí)行循環(huán)體,再判斷循環(huán)條件是否成立,格式如下:do{

循環(huán)體;}while(布爾表達式);執(zhí)行過程是,首先執(zhí)行一次循環(huán)體語句,然后判斷布爾表達式的值,當其值為true時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值為false,循環(huán)結束。其流程圖如圖5-5所示。循環(huán)體語句布爾表達式truefalse圖5-5do…while循環(huán)程序執(zhí)行流程圖5.3.2do-while循環(huán)(續(xù))do-while循環(huán)首先執(zhí)行循環(huán)體,再判斷循環(huán)條件。如果條件成立,則重復執(zhí)行循環(huán)體;條件不成立,則結束循環(huán),循環(huán)體至少被執(zhí)行一次。而while循環(huán)首先判斷循環(huán)條件,若條件不成立,則循環(huán)體一次也不執(zhí)行,直接退出循環(huán)。這是do-while循環(huán)和while循環(huán)最大的區(qū)別。do-while循環(huán)語句可以組成多重循環(huán),而且也可以和while語句相互嵌套。例5.8用do-while循環(huán)計算1-2+3-4...-100。注意:在do-while語句的while(表達式)后必須加分號。

總結通過上面兩例,我們發(fā)現(xiàn),對同一個問題可以用while循環(huán)語句處理,也可以用do-while循環(huán)語句處理。一般情況下,可以用兩種語句處理同一問題,但要注意循環(huán)控制條件有些情況下可能不同。5.3.3for循環(huán)for循環(huán)的使用最為靈活,可以用于循環(huán)次數(shù)已經確定的情況,也可以用于循環(huán)次數(shù)不確定但循環(huán)結束條件已知的情況。它可以取代while循環(huán)和do-while循環(huán)。for循環(huán)語句的一般格式如下:for(表達式1;表達式2;表達式3){循環(huán)體;}說明(1)()內的三個表達式之間用分號分隔。其中,表達式1是for循環(huán)的初始化部分,一般用來設置循環(huán)控制變量的初值。表達式1允許并列多個表達式,之間用逗號分隔,表達式1僅在循環(huán)開始時執(zhí)行一次;表達式2一般為條件表達式,結果為布爾型,當值為false時,退出循環(huán),值為true時,則重復執(zhí)行循環(huán)體。表達式3一般是增量表達式,該式決定循環(huán)控制變量的變化方式。(2)每執(zhí)行循環(huán)體一次,就要重新計算表達式3,然后由表達式2判斷,決定循環(huán)體是否繼續(xù)執(zhí)行。循環(huán)體若為一條語句,{}可以省略;若為多條語句,{}不可省略。例5.9用for循環(huán)計算1-2+3-4...-100。注意:for循環(huán)、while循環(huán)以及do-while循環(huán)都允許嵌套,并且可以相互嵌套,構成多重循環(huán)結構。for循環(huán)的使用方式for循環(huán)的使用方式比較靈活,可以有以下幾種形式。1.在for語句的表達式1中,允許定義多個變量,這些變量的數(shù)據類型相同并且它們的作用域僅限于循環(huán)體內。例如,計算5!。for(inti=1,p=1;i<=5;i++)p*=i;2.在for語句中可以省略表達式1。例如,計算5!。inti=1,p=1;for(;i<=5;i++)p*=i;for循環(huán)的使用方式(續(xù))3.在for語句中可以省略表達式2,不對循環(huán)條件進行判斷,將會造成無限循環(huán)。一般可以采用在循環(huán)體內設置轉移語句break來跳出循環(huán)。例如,計算5!。intp=1;for(inti=1;;i++){if(i>5)break;//結束循環(huán)p*=i;}

循環(huán)體內的if(i>5)break;語句表示,當i的值大于5時,則跳出循環(huán),它代替了原來表達式2所起的作用。break語句將在第5.4節(jié)作將詳細介紹。for循環(huán)的使用方式(續(xù))4.在for語句中可以省略表達式3。例如,計算5!。intp=1;for(inti=1;i<=5;){p*=i;i++;}//改變循環(huán)變量i的值5.for語句中的各表達式都可以為空,但分號不能少。例如, for(;;)

在這種形式中,循環(huán)體內外應有相關語句實現(xiàn)各表達式的功能。6.for循環(huán)體可以是空語句,即循環(huán)過程什么也不做,僅僅產生一個時間延遲的效果。例如:for(inti=10;i>=1;i--);5.4控制轉移語句控制轉移可以有條件地改變程序的執(zhí)行順序。Java支持三種控制轉移語句:break語句,continue語句和return語句。5.4.1break語句break語句的作用是使程序的執(zhí)行流程從一個語句塊內部轉移出去。它只在switch語句和循環(huán)語句中使用,允許從switch語句的case子句中跳出,或從循環(huán)體內跳出。break語句分為帶標號和不帶標號兩種形式,break;break標號名;其中,標號名用標識符表示,用來標識break語句欲跳出的語句塊,它必須位于break語句所在的封閉語句塊的開頭處;標號名用冒號與其后面的語句分開。帶標號的break語句可以從多重循環(huán)體的最內部跳出所有的循環(huán),而不帶標號的break語句只能跳到當前循環(huán)外層。例5.10break語句應用實例。分析:以下程序中當i的值為0、1、2、3、4時,i==5的值為false,不執(zhí)行break語句,而是執(zhí)行輸出語句;當i的值變化到5時,i==5的值為true,執(zhí)行break語句而中斷循環(huán),循環(huán)結束。本程序循環(huán)執(zhí)行的次數(shù)為5。程序源代碼如下:程序運行結果如下:i=0i=1i=2i=3i=45.4.2continue語句continue語句只能用在循環(huán)語句中,它的作用是終止當前這一輪循環(huán),跳過本輪剩余的語句,直接進入下一輪循環(huán)。continue語句具有帶標號和不帶標號兩種形式,

continue;continue[標號名];這個標號名必須放在循環(huán)語句之前,用于標志這個循環(huán)體。在while和do-while循環(huán)中,不帶標號的continue語句使程序流程直接跳到循環(huán)條件的判斷上;在for循環(huán)中,不帶標號的continue語句直接計算表達式3的值,再根據表達式2的值決定是否繼續(xù)循環(huán)。例5.11continue語句應用實例分析:以下程序中,當i的值為0、1、2、3、4時,i==5的值為false,不執(zhí)行continue語句,而是執(zhí)行輸出語句;當i的值變化到5時,i==5的值為true,執(zhí)行continue語句,跳過輸出語句,然后轉向執(zhí)行for語句中的i++,開始下一輪循環(huán)。程序運行結果如下:

i=0i=1i=2i=3i=4i=6i=7i=8i=95.4.3return語句return語句用在方法中。當程序執(zhí)行到這條語句時,終止當前方法的執(zhí)行,返回到調用這個方法的位置之后。return語句有帶參數(shù)和不帶參數(shù)的兩種形式,return;return(表達式);帶參數(shù)的形式也可以為:return表達式;5.4.3return語句(續(xù))不帶參數(shù)的return語句被執(zhí)行時,不返回任何值。這種方法的返回值類型為void類型。在沒有返回值的方法體中,也可以不用return語句,程序執(zhí)行完方法體的最后一條語句后,遇到方法的結束標志“}”時,程序流程將自動返回到調用這個方法的程序中。帶參數(shù)的return語句后面跟一個表達式,當程序執(zhí)行到這個語句時,就計算這個表達式,然后將其值返回到調用該方法的程序中。當表達式值的數(shù)據類型與方

溫馨提示

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

評論

0/150

提交評論