程序的流程控制_第1頁
程序的流程控制_第2頁
程序的流程控制_第3頁
程序的流程控制_第4頁
程序的流程控制_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

關于程序的流程控制12教學目標熟練掌握Java語言中的流程控制結構。掌握Java中選擇結構的基本原理及使用方法。掌握Java中循環(huán)結構的基本原理及使用方法。熟練掌握Java中數(shù)組的使用方法及能夠熟練應用。第2頁,共70頁,2024年2月25日,星期天3教學重點流程控制構成了編程語言的邏輯,而對這些控制語句的靈活運用又能有助于編程邏輯的清晰整理。本章首先介紹了Java流程控制結構中的選擇結構和循環(huán)結構,最后,介紹了跳轉語句的基本原理。掌握數(shù)組的聲明,生成和初始化方法。熟練掌握數(shù)組的使用,對于多維數(shù)據(jù),要求學生主要掌握二維數(shù)組的聲明、生成、初始化、及使用方法。第3頁,共70頁,2024年2月25日,星期天4例1:打印一個3x4的矩陣classDrawRect{ publicstaticvoidmain(String[]args) { System.out.println(“****"); System.out.println(“****"); System.out.println(“****"); }}3.1程序的流程控制第4頁,共70頁,2024年2月25日,星期天5例2:上一個例子的變形classDrawRect

{publicstaticvoidmain(String[]args){ System.out.print(“*"); System.out.print(“*"); System.out.print(“*"); System.out.println(“*\n"); System.out.print(“*"); System.out.print(“*"); System.out.print(“*");System.out.println(“*\n");System.out.print(“*");System.out.print(“*");System.out.print(“*");System.out.println(“*"); }}問題:如何作出決策,提高程序的執(zhí)行效率?第5頁,共70頁,2024年2月25日,星期天6分析問題找出最佳解決方案以上兩種方法是初學者最容易想到的,但做了很多重復的工作,會使程序變得很繁瑣,結構也不夠清晰。在工作量少的時候似乎沒那么明顯,但當需要打印的矩陣比較大的時候就會顯現(xiàn)出來(如:打印一個100x60的矩陣)。想解決這個問題我們可以通過循環(huán)來解決,講到循環(huán)就要先介紹一下程序的結構化設計。第6頁,共70頁,2024年2月25日,星期天7程序設計的三種結構順序結構循環(huán)結構選擇結構

循環(huán)結構與選擇結構所使用的語句又叫作流程控制語句,作用是改變程序的執(zhí)行順序。第7頁,共70頁,2024年2月25日,星期天8Java的程序控制語句分為以下幾類:選擇、循環(huán)和跳轉。塊(即復合語句)是指由一對花括號括起來的若干條簡單的Java語句。塊定義著變量的作用域(scope)。一個塊可以嵌套在另一個塊中。3.1程序的流程控制第8頁,共70頁,2024年2月25日,星期天93.1程序的流程控制publicstaticvoidmain(Stringargs[]){inta; ......

{ intb; ......}//變量b的作用域只在塊內,到塊外便失去作用。

......}第9頁,共70頁,2024年2月25日,星期天103.2選擇結構if語句if(expression)

語句1;語句2;練習:NumberTest.java條件判斷執(zhí)行語句或代碼塊真假第10頁,共70頁,2024年2月25日,星期天113.2選擇結構if語句expression==true語句2語句塊語句塊:用花括號括起來的語句。if(expression){statment1;statment2;……}語句2;左側的語句也以下語句有什么不同?if(expression)statment1;statment2;……

語句2;第11頁,共70頁,2024年2月25日,星期天123.2選擇結構提示:合理采用縮進格式書寫代碼堅持用左右大括號將if條件括起來的習慣,即使一條語句也括。else子句if(expression){statement1;}else{statement2;}next_statement;條件判斷執(zhí)行語句2或代碼塊2假執(zhí)行語句1或代碼塊1真第12頁,共70頁,2024年2月25日,星期天133.2選擇結構if語句的嵌套形式if(<條件1>)

if(<條件2>)<語句1>;

else<語句2>;else

if(<條件3>)<語句3>;

else<語句4>;若條件1成立,則執(zhí)行哪一組IF語句?若條件1不成立,則執(zhí)行哪一組IF語句?第13頁,共70頁,2024年2月25日,星期天143.2選擇結構if語句的嵌套形式if(<條件1>)<語句1>;elseif(<條件2>)<語句2>;elseif(<條件3>)………..else<語句n>;判斷條件1執(zhí)行語句1或代碼塊1判斷條件2執(zhí)行語句2或代碼塊2............判斷條件N執(zhí)行語句N或代碼塊N執(zhí)行語句N+1或代碼塊N+1真真真假假假假第14頁,共70頁,2024年2月25日,星期天153.2選擇結構if語句的嵌套形式if(<條件1>)<語句1>;elseif(<條件2>)<語句2>;elseif(<條件3>)………..else<語句n>;什么情況下會執(zhí)行到語句2,什么情況下會執(zhí)行到語句n?語句1與語句2等是否可以都執(zhí)行?else總是和距它最近的if配對第15頁,共70頁,2024年2月25日,星期天16switch語句又稱多分支選擇語句與if-else一樣,是Java語言的條件選擇語句,if語句是判斷條件的值,再從兩個程序塊中選擇其中一塊執(zhí)行,只能出現(xiàn)兩個分支,而switch語句可存在多個分支。處理多種分支情況時,用switch語句代替if語句可以簡化程序,使程序結構清晰明了,可讀性增強。3.2.3switch語句第16頁,共70頁,2024年2月25日,星期天17switch語句的一般形式為:

switch(<條件>){case<常量值1>:<語句1>;break; case<常量值2>:<語句2>;break; ……….. case<常量值n>:<語句n>;break; [default:<缺省語句>;]}產(chǎn)生的結果值可以是char型,byte型,short型,int型或枚舉型。不加break語句,執(zhí)行流程如何?若條件值與case值均不匹配,而又沒有此句,執(zhí)行流程如何?3.2.3switch語句第17頁,共70頁,2024年2月25日,星期天18switch(<條件>){ case<值1>: case<值2>: case<值3>:<語句3>;break; ……….. case<值n>:<語句n>;break; [default:<缺省語句>;]}執(zhí)行流程如何?實例:SwitchSample.java3.2.3switch語句第18頁,共70頁,2024年2月25日,星期天19for語句的一般形式為:for(<初始化>;<條件>;<迭代因子>){ <循環(huán)體語句>}其中:初始化部分設置控制循環(huán)的變量的初值。條件判斷部分可以是任何布爾表達式。迭代因子控制循環(huán)變量遞增或遞減。3.3.1循環(huán)---for第19頁,共70頁,2024年2月25日,星期天20for語句的執(zhí)行過程為:執(zhí)行初始化。判斷條件的返回值。如果為真執(zhí)行循環(huán)體語句;如果為假就跳出for語句循環(huán)。執(zhí)行迭代因子,為下次循環(huán)做準備。返回②。for語句是先執(zhí)行②,即先判斷后執(zhí)行,如果不滿足判斷條件,循環(huán)體可能一次都不能執(zhí)行。3.3.1循環(huán)---for第20頁,共70頁,2024年2月25日,星期天21for循環(huán)流程圖實例:ForTick.javadoubleFor.java前續(xù)代碼及循環(huán)控制變量的定義循環(huán)體中的程序循環(huán)控制條件TrueFalse后續(xù)代碼步長變量的改變第21頁,共70頁,2024年2月25日,星期天流程圖進程判斷輸入輸出起始符NYYN開始結束inti=0i<3?i++i<4?j++intj=0打印*號打印換行符號第22頁,共70頁,2024年2月25日,星期天23collection-basedfor循環(huán)采用for語句的基本格式在for循環(huán)語句的圓括號之間的第一個控制表達式中是循環(huán)變量,然后以冒號分隔,第二個控制表達式,確定了第一個控制表達式中聲明的變量的取值來源的集合。程序:AverageGrade.java3.3.1循環(huán)---for第23頁,共70頁,2024年2月25日,星期天24while語句的一般形式為:[<初始化部分>]while(<條件表達式>){ <循環(huán)體語句>; [<迭代部分>;]}實例:NumAdd.java3.3.3循環(huán)---while終止條件?執(zhí)行循環(huán)體假初始化執(zhí)行步長部分真第24頁,共70頁,2024年2月25日,星期天25while語句的執(zhí)行過程為:初始化,為循環(huán)設置初始值。判斷條件表達式的值,如果為真,就執(zhí)行循環(huán)體語句;如果條件表達式的值為假,就跳出while語句。執(zhí)行迭代部分,為下次循環(huán)做準備。返回②。while語句是先執(zhí)行②,即先判斷后執(zhí)行,如果不滿足判斷條件,循環(huán)體可能一次都不能執(zhí)行。注意,在循環(huán)體中應該有使循環(huán)趨于結束的語句,否則循環(huán)將永遠進行下去,形成死循環(huán)。

3.3.3循環(huán)---while第25頁,共70頁,2024年2月25日,星期天26while循環(huán)的流程圖前續(xù)代碼及循環(huán)控制變量的定義循環(huán)體中的程序循環(huán)控制條件TrueFalse后續(xù)代碼實例:AverageGrade2.java第26頁,共70頁,2024年2月25日,星期天27for循環(huán)與while循環(huán)的比較for循環(huán)比while循環(huán)結構清晰。for循環(huán)的循環(huán)控制變量的定義、初始化,選換結束的條件,步長變量的控制都在一條語句中實現(xiàn)。while循環(huán)的循環(huán)控制變量是在循環(huán)之前定義的,循環(huán)控制條件與for相同,而步長變量是在循環(huán)體內部修改的。有時候用while實現(xiàn)會方便很多。例如在程序中將在1~10之間產(chǎn)生一個隨機數(shù),當產(chǎn)生的數(shù)字為7的時候打印一個提示語句并結束程序,否則繼續(xù)執(zhí)行直到產(chǎn)生的數(shù)字為7。第27頁,共70頁,2024年2月25日,星期天28while語句先判斷后執(zhí)行,while語句為“當型“循環(huán)do-while語句先執(zhí)行后判斷,循環(huán)體至少被執(zhí)行一次,稱do-while語句為”直到型“循環(huán)。3.3.5循環(huán)---do-while第28頁,共70頁,2024年2月25日,星期天29do-while語句的一般形式為:[<初始化部分>]do{<循環(huán)體語句>;[<迭代部分>;]}while(<條件表達式>);注意:這里while()后面有一個“;”3.3.5循環(huán)---do-while終止條件?執(zhí)行循環(huán)體假初始化執(zhí)行步長部分真第29頁,共70頁,2024年2月25日,星期天30do-while語句的執(zhí)行過程為:初始化,為循環(huán)設置初始值。執(zhí)行循環(huán)體語句。執(zhí)行跌代部分,為下次循環(huán)做準備。判斷條件表達式的值,如果為真,就返回②;如果條件表達式的值為假,就跳出do-while語句。do-while語句是先執(zhí)行循環(huán)體,再判斷,循環(huán)體至少被執(zhí)行一次。同樣,在循環(huán)體中應該有使循環(huán)趨于結束的語句。3.3.5循環(huán)---do-while第30頁,共70頁,2024年2月25日,星期天31dowhile循環(huán)流程圖程序見:IntTurn.java前續(xù)代碼及循環(huán)控制變量的定義循環(huán)體中的程序循環(huán)控制條件TrueFalse第31頁,共70頁,2024年2月25日,星期天32嵌套循環(huán):用戶可以將任何一種循環(huán)嵌入到另一種循環(huán)中,并且可以進行任意多重的嵌套。例題:計算從1開始到給定數(shù)值之間所有整數(shù)的乘積。程序見:Factorial.java3.3循環(huán)第32頁,共70頁,2024年2月25日,星期天33功能:結束本循環(huán),跳到循環(huán)語句之后的第一條語句處執(zhí)行。例題:BreakLoop1.java帶標號的break語句:允許程序跳轉至有標號的外層塊或循環(huán)之后的語句處繼續(xù)執(zhí)行,而不管這些嵌套塊有多少層。程序見:BreakLoop2.java3.4跳轉語句---break第33頁,共70頁,2024年2月25日,星期天34功能:結束本次循環(huán),進入下一次循環(huán),例如:for(inti=1;i<=limit;i++){if(i%3==0){continue;}sum+=i;}3.4.2continue第34頁,共70頁,2024年2月25日,星期天35功能:可以停止執(zhí)行內循環(huán),并且可以直接跳轉至包含本循環(huán)的外循環(huán)的下一輪迭代的起始處繼續(xù)執(zhí)行。程序見:MultiList.java3.4.2帶標號的continue第35頁,共70頁,2024年2月25日,星期天3.5數(shù)組問題的提出現(xiàn)有一班級共30人,想要計算全班參加英語考試的平均分數(shù),應如何設計程序實現(xiàn)?問題的分析(1)程序結構?順序,選擇,循環(huán)(2)數(shù)據(jù)結構?單變量,數(shù)組第36頁,共70頁,2024年2月25日,星期天數(shù)組:是一個具有相同類型變量的指定的集合的對象。數(shù)組元素:數(shù)組中的每個變量,由數(shù)組名和一個int型的整數(shù)值表示。索引:數(shù)據(jù)名后的整數(shù)值,一般放在數(shù)組名后面的方括號中。注意:數(shù)組中第一個元素的索引值是0。intage[];age[0]=18;數(shù)組名索引數(shù)組類型3.5數(shù)組第37頁,共70頁,2024年2月25日,星期天一、數(shù)組變量數(shù)組變量和所引用的數(shù)組是兩個分離的實體。為數(shù)組變量所分配的內存空間保存著對數(shù)組對象的引用,而不是數(shù)組對象本身。數(shù)組對象本身是一個存在于內存其它位置的獨特實體。引用對象的變量中存儲的是引用。引用記錄著它所引用的對象的內存地址。第38頁,共70頁,2024年2月25日,星期天39基本數(shù)據(jù)類型一維數(shù)組內存分配棧內存堆內存numc0000088:44000088:4400newint[3]產(chǎn)生的對象數(shù)組的內存分配圖一、數(shù)組變量第39頁,共70頁,2024年2月25日,星期天40基本數(shù)據(jù)類型一維數(shù)組內存分配棧內存堆內存numc000null0088:4400newint[3]產(chǎn)生的對象數(shù)組的內存分配圖num=null;0088:4400一、數(shù)組變量第40頁,共70頁,2024年2月25日,星期天41堆內存studentsnullStudent[]students;

棧內存一、數(shù)組變量第41頁,共70頁,2024年2月25日,星期天42堆內存studentsc0088:44000088:4400newstudents[3]產(chǎn)生的對象nullnullStudent[]students;students=newStudent[3];

null棧內存一、數(shù)組變量第42頁,共70頁,2024年2月25日,星期天43堆內存studentsc0088:44000088:4400newstudents[3]產(chǎn)生的對象nullnullStudent[]students;students=newStudent[3];students[0]=newStudent(“l(fā)isi”,18);

student[0]標識的Student對象lisi180088:46600088:4660

棧內存一、數(shù)組變量第43頁,共70頁,2024年2月25日,星期天二、數(shù)組定義聲明一維數(shù)組的兩種格式:數(shù)組元素類型數(shù)組名字[];doubleanArray[];數(shù)組元素類型[]數(shù)組名字;double[]anArray;聲明二維數(shù)組的兩種格式:數(shù)組元素類型數(shù)組名字[][];數(shù)組元素類型[][]數(shù)組名字;創(chuàng)建數(shù)組數(shù)組名字=new數(shù)組元素的類型[數(shù)組元素的個數(shù)]注意:聲明時不能指定數(shù)組的大??!第44頁,共70頁,2024年2月25日,星期天舉例:intprimes[];primes=newint[10];或

int[]primes=newint[10];注意數(shù)組的靜態(tài)性:一旦創(chuàng)建就不能修改數(shù)組的長度!二、數(shù)組定義第45頁,共70頁,2024年2月25日,星期天三、數(shù)組長度利用數(shù)組對象的數(shù)據(jù)成員length可引用該數(shù)組的長度,即該數(shù)組中所包含的元素個數(shù)。若有:double[]myArray=newdouble[100];則可使用myArray.length來引用它的長度,即得到的數(shù)值為100。第46頁,共70頁,2024年2月25日,星期天double[]anArray;anArray=newdouble[3]anArray:???length3012anArray:nullHere,thearrayisnotdefined.Here,thearrayisdefined,buttheelementsinthearrayareNOTdefined.三、數(shù)組長度第47頁,共70頁,2024年2月25日,星期天四、訪問數(shù)組元素訪問數(shù)組元素:數(shù)組名[索引值]例如:對前面所聲明的primes數(shù)組,其第一個元素的引用是primes[0]若索引值小于0或大于最后一個的索引值,系統(tǒng)都會拋出一個異常(Exception)。拋出異常只是指示運行時錯誤的一種方式,不同種類的錯誤就有不同類型的異常,當程序拋出異常時,通常會被終止。第48頁,共70頁,2024年2月25日,星期天E

haslength

6;E[4]

is

14;If

i

is

3,then

E[i]

is

-2;Assignavalue:

E[5]=6.0Elength:6473-2146123450四、訪問數(shù)組元素第49頁,共70頁,2024年2月25日,星期天五、數(shù)組變量的重用Java語言允許類型相同,而長度不同的兩個數(shù)組互相賦值。賦值的結果是兩個數(shù)組名指向同一數(shù)組。例如:int[]primes=newint[10];

primes=newint[50];例如:double[]dub=newint[10];//illegal注意:可以改變數(shù)組變量所引用的數(shù)組,但是不可以改變數(shù)組元素所存儲的值的類型。第50頁,共70頁,2024年2月25日,星期天數(shù)組賦值只是對引用的復制B=Aresultsin:ABNOT:AB03length203length203length2Howcanwemakeacopyofanarray?五、數(shù)組變量的重用第51頁,共70頁,2024年2月25日,星期天六、數(shù)組的初始化定義數(shù)組時直接初始化:

如:int[]primes={1,2,3,4,5,6,7};

//此數(shù)組為7個元素注意:初始化數(shù)組時,必須給出所有元素的值.若只對數(shù)組的部分元素指定初值,可以對這部分數(shù)組元素單獨賦值,其它未賦值元素默認為0。例如:int[]primes=newint[100];

primes[0]=1;

或for(inti=0;i<primes.length;i)primes[i]=1;第52頁,共70頁,2024年2月25日,星期天使用實用方法初始化數(shù)組

importjava.util.Arrays;

Arrays.fill(primes,1);使用已有數(shù)組的引用來初始化數(shù)組變量

long[]even={2L,4L,6L,8L};

long[]value=even;分析:創(chuàng)建了____個數(shù)組變量,創(chuàng)建了____個數(shù)組.解答:兩個數(shù)組變量都引用同一個數(shù)組,而且通過兩個變量名都可以訪問這個數(shù)組的元素。六、數(shù)組的初始化第53頁,共70頁,2024年2月25日,星期天例如:對非基本數(shù)據(jù)類型MyDate[]dates;dates=newMyDate[3];dates[0]=newMyDate(22,7,1964);dates[1]=newMyDate(1,1,2000);dates[2]=newMyDate(22,12,1964);或:MyDate[]dates={newMyDate(22,7,1964),newMyDate(1,1,2000),newMyDate(22,12,1964)};六、數(shù)組的初始化第54頁,共70頁,2024年2月25日,星期天數(shù)組交換的方法double[]input=newdouble[100];double[]output=newdouble[100];double[]temp;temp=input;input=output;output=temp;分析:是交換數(shù)組地址還是數(shù)組內容?解答:此種方法只是交換了數(shù)組在內存中的地址,沒有移動任何數(shù)組元素。若要復制數(shù)組,則需定義同樣大小的數(shù)組,并把原數(shù)組中的元素逐個復制到新數(shù)組中。六、數(shù)組的初始化第55頁,共70頁,2024年2月25日,星期天03length2A==B

istrueA==B

isfalseAB03length203length2AB03length2當兩個數(shù)組之間進行比較和賦值的時候,只是兩個數(shù)組的引用進行比較和賦值。(Itisthereferencesthatarecomparedorassigned,notthearrays.)六、數(shù)組的初始化第56頁,共70頁,2024年2月25日,星期天七、數(shù)組的使用double[]samples=newdouble[50];doubleaverage=0.0;for(inti=0;i<samples.length;i++){samples[i]=100.0*Math.random();}

for(inti=0;i<samples.length;i++){average+=samples[i];}average/=samples.length;第57頁,共70頁,2024年2月25日,星期天八、多維數(shù)組二維數(shù)組:根據(jù)兩個索引值的變化,可以訪問數(shù)組的行或列。聲明格式:類型說明符數(shù)組名[][];類型說明符[][]數(shù)組名;二維數(shù)組的初始化直接指定初值用new操作符第58頁,共70頁,2024年2月25日,星期天先聲明數(shù)組再初始化數(shù)組數(shù)組名=new類型說明符[行數(shù)][];數(shù)組名=new類型說明符[行數(shù)][列數(shù)];例:

intarra[][];//聲明二維數(shù)組

arra=newint[3][4];//初始化二維數(shù)組等價于:

arra=newint[3][];

arra[0]=newint[4];

arra[1]=newint[4];

arra[2]=newint[4];arra=newint[3][]for(inti=0;i<3;i++){arra[i]=newint[4];}八、多維數(shù)組第59頁,共70頁,2024年2月25日,星期天定義二維數(shù)組也可以采用如下方式:

float[][]temperature;temperature=newfloat[10][365];例題:氣象迷程序見WeatherFan.javaint[][]arr=newint[][4];是否正確?

八、多維數(shù)組第60頁,共70頁,2024年2月25日,星期天不同長度的嵌套數(shù)組在Java中,創(chuàng)建嵌套數(shù)組時,其中的各個數(shù)組的長度可以不同,例如:

float[][]samples=newfloat[6][];

則變量samples引用了一個具有6個元素的數(shù)組,其中每個元素可以容納一個對一維數(shù)組的引用,可以單獨定義這些數(shù)組,例如:

samples[2]=newfloat[3];samples[5]=newfloat[10];八、多維數(shù)組第61頁,共70頁,2024年2月25日,星期天二維數(shù)組的各子數(shù)組元素的個數(shù)可以不同。例1:int[][]arr1={{3,-9},{8,0,1},{10,11,9,8}};例2:

float[][]mat=newfloat[4][]; for(inti=0;i<mat.length;i++)

mat[i]=newfloat[i+1]; float[]vector2=mat[1];0123matmat.length0010120123mat[0]mat[1](vector2)mat[2]mat[3]八、多維數(shù)組第62頁,共70頁,2024年2月25日,星期天分析如下代碼的功能:

float[][]samples=newfloat[6][];

for(inti=0;i<samples.length;i++)samples[i]=newfloat[i+1];for(int

溫馨提示

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

評論

0/150

提交評論