官术网_书友最值得收藏!

第3章 程序流程控制

3.1 順序與分支結構

3.1.1 順序結構

程序的基本結構形式有順序結構、分支結構和循環結構。順序結構是程序中經常見到的,也是最簡單的一種結構。語句依次排列,就形成了順序結構。語句的先后順序決定其執行次序,也就是排在前面的語句先執行,排在后面的語句后執行。

順序結構可以獨立使用,構成一個簡單的完整程序,不過大多數情況下,順序結構都是作為程序的一部分,與其他結構一起構成一個復雜的程序。例如,分支結構中的復合語句、循環結構中的循環體等。

【例3-1】隨機生成一道20以內的加法測試題。

【程序】

【運行結果】

【程序說明】

程序中的語句就是按順序結構來組織的。先產生一個20以內的隨機整數賦值給a,再產生一個20以內的隨機整數賦值給b,最后輸出對應的加法測試題。

Math.random()調用Math類中的random()方法產生一個[0, 1)之間的double型隨機數。這樣表達式Math.random()的值是一個[0,1)之間的隨機實數,而表達式(int)(Math.random()*20)的值是一個[0, 20)之間的隨機整數。程序運行后,每次輸出的加法測試題是不一樣的。

3.1.2 if語句實現分支結構

if語句的一般格式為:

條件表達式有true和false兩種可能的取值,分別表示邏輯判斷的真和假。if語句的執行流程如圖3-1所示,如果條件表達式的值為true,就執行語句A;否則不執行語句A。

圖3-1 if語句的執行流程

這里的語句A可以是單個語句,也可以是包含多條語句的語句塊。語句塊也稱為復合語句,以“{”開始,“}”結束,中間包含若干條語句。

【例3-2】隨機生成一道20以內的減法測試題,要求被減數大于或等于減數。

【程序】

【運行結果】

【程序說明】

程序先產生一個20以內的隨機整數賦值給a,再產生一個20以內的隨機整數賦值給b。為了讓被減數大于等于減數,當a小于b時,需要將a和b的值互換。

語句塊{t=a;a=b;b=t;}中的3條語句是一個整體,在a小于b時一一執行,而在a大于或等于b時都不執行。語句塊中的3條語句用來實現變量a和變量b之間的交換。先把a暫存在變量t中,然后把b賦值給a,最后把t賦值給b。

3.1.3 if-else語句實現分支結構

if-else語句的一般格式為:

if-else語句的功能是,根據條件表達式的值,確定執行語句A或語句B,執行流程如圖3-2所示。如果條件表達式的值為true,則執行語句A;否則執行語句B。

圖3-2 if-else語句的執行流程

【例3-3】隨機生成一道20以內的加法測試題,由程序對測試者輸入的計算結果進行評判。

【程序】

【運行結果】

第1次運行:

第2次運行:

【程序說明】

程序先隨機產生一個加法測試題,再由測試者輸入計算結果,然后由程序對輸入的計算結果進行評判。計算正確輸出“Good!”,計算錯誤輸出“Wrong!”。在計算正確和錯誤兩種情況下,執行不同的語句。

3.1.4 嵌套if語句實現多分支結構

前面介紹了兩種形式的if語句。if語句所包含的語句A(或語句B)也可以是一個if語句,也就是說,if語句內嵌了另一個if語句,這種情況一般稱為嵌套if語句。多分支結構可以采用嵌套if語句來實現。

【例3-4】隨機生成一道20以內的加法、減法或乘法測試題,由計算機對測試者輸入的計算結果進行評判。

【程序】

【運行結果】

第1次運行:

第2次運行:

【程序說明】

本例不僅要求運算數據是隨機的,而且運算類型也是不確定的,可能是加、減、乘運算中的一種。如何產生一個運算類型不確定的算式呢?一個簡單的思路是,先生成一個0~2的隨機整數,然后根據整數的值輸出相應類型的算式。0、1、2對應加法、減法、乘法這3個分支,可以采用嵌套if語句實現。

3.1.5 switch語句實現多分支結構

例3-4用嵌套if語句實現了多分支選擇結構。多層的if嵌套可以實現多分支的選擇結構,但過多的if嵌套會使程序不太容易理解。Java語言提供了switch語句,用于處理多分支問題。switch語句的一般格式為:

每個case及default表示一個分支,語句執行時會根據表達式A的值,選擇執行對應的分支。switch語句的執行流程如下:

(1)首先計算表達式A的值,然后用此值依次與各個case常量表達式的值比較,當表達式A的值與某個case后面的常量表達式的值相等時,就轉去執行此case后面的語句序列,執行break語句后,退出switch語句。

(2)若表達式A的值與所有case后面的常量表達式值都不相等,則執行default后面的語句序列n+1,然后退出switch語句。

使用switch語句時,需要注意下面幾個問題:

(1)表達式A的數據類型可以是byte、short、int或char,但不可以是long、float、double和boolean。

(2)每個case后面都是常量表達式,其中不可以出現變量。每個case后常量表達式的值必須互不相同,否則就會出現互相矛盾的現象。

(3)從形式上來說,break語句并不是必需的。但去掉break語句以后,程序流程會發生變化。例如,如果把語句序列2后面的break語句刪除,那么當表達式A的值與常量表達式2的值相等時,不僅會執行語句序列2,還會執行其后的語句,一直執行至遇到break語句為止。

【例3-5】用switch語句重新編寫例3-4的程序。

【程序】

【運行結果】

第1次運行:

第2次運行:

【程序說明】

程序中op的值是用隨機方法生成的,其值只能是0、1或2。因此,default分支對應op的值為2的情況,也可以替換為case 2。另外,default分支后面沒有其他分支,因此語句序列后面可以沒有break語句。

主站蜘蛛池模板: 定边县| 鹤峰县| 白朗县| 于田县| 贡嘎县| 乌拉特中旗| 金华市| 密云县| 桃江县| 抚顺县| 老河口市| 青河县| 西丰县| 凤台县| 钟祥市| 博白县| 宁蒗| 辽阳市| 建宁县| 福鼎市| 沛县| 沂源县| 理塘县| 沙坪坝区| 犍为县| 左贡县| 洪雅县| 勃利县| 潞城市| 武威市| 淳安县| 隆化县| 绥棱县| 平昌县| 双鸭山市| 改则县| 湖州市| 冷水江市| 文成县| 平原县| 伊宁市|