Download presentation
Presentation is loading. Please wait.
1
JAVA程式語言入門(I) 授課教師:王大瑾
Ch05 條件控制 JAVA程式語言入門(I) 授課教師:王大瑾
2
前言 本章內容: if …then … else 巢狀條件控制 switch…case break
3
結構化程式設計-觀念 結構化程式設計的主要觀念有三項,如下所示: 由上而下的設計方法。 流程控制結構。 模組。
由上而下的設計方法是當我們面對問題時,先將整個問題分解成數個獨立功能的大模組,再對於這每一個大模組,一一分割成數個小模組。 流程控制結構。 模組。
4
程式區塊-說明 Java程式區塊是一種最簡單的結構敘述,它的目的只是將零到多列的程式敘述組合成一個群組,可以將整個程式區塊視為一列程式敘述,如下所示: { 程式敘述; ………… } 上述程式區塊使用”{“和”}”大括號包圍的程式敘述,事實上,在大括號內也可以不含任何程式敘述,稱為「空程式區塊」(Empty Block)。
5
程式區塊-範例 在程式區塊可以提供群組的程式編排,不只如此,因為Java語言並沒有限制宣告變數的位置,所以程式區塊還可以用來隱藏變數宣告,如下所示: { int temp; temp = a; a = b; b = temp; } 上述程式區塊宣告整數變數temp,變數temp只能在程式區塊內使用,一旦離開程式區塊,就無法存取變數temp,變數temp稱為程式區塊的區域變數(Local to the Block)。
6
範例1 public class Ch04_01 { public static void main(String [] args)
{ int a = 6; int b = 12; { System.out.println("交換程式變數:"); System.out.print("原來: " + a + " : " + b + "\n"); //System.out.println("原來: " + a + " : " + b + "\n"); } { int temp; temp = a; a = b; b = temp; System.out.println("交換後: " + a + " : " + b); //System.out.println(temp);
7
結構化程式設計-說明 結構化程式設計是一種軟體開發方法,它是一種組織和撰寫程式碼的技術,使用由上而下的設計方法來分析問題,將程式分解成階層架構的「模組」(Module),每個模組是一段擁有獨立功能的程式碼,而且只有單一的進入點和離開點,各模組間使用三種流程控制來整合: 循序結構(Sequential) 選擇結構(Selection) 重複結構(Iteration)
8
流程 流程就是程式執行的方向 循序執行 可以利用條件控制敘述或迴圈控制敘述改變流程方向
9
流程控制的基礎-循序結構 循序結構是程式預設的執行方式,也就是一個敘述接著一個敘述依序的執行,如右圖所示:
10
流程控制的基礎-選擇結構 選擇結構是一種條件控制敘述,它是一個選擇題,可以分為單一選擇、二選一或多選一三種,程式執行的順序是依照關係運算式的條件,來決定執行那一個區塊的程式碼,如右圖所示:
11
流程控制敘述 五種控制敘述: if/else Switch For While do/while 選擇敘述 迴圈敘述
12
流程控制的基礎-重複結構說明 重複結構是迴圈控制,它是重複執行一 個區塊的程式碼,提供一個結束條件結 束迴圈的執行,依結束條件測試的位置 不同分為兩種,如下所示: 前測式重複結構 後測式重複結構
13
流程控制的基礎-前測式重複結構 前測式重複結構:測試迴圈結束條件在程式區塊的開頭,需要符合條件,才能執行迴圈中的程式碼,如右圖所示:
14
流程控制的基礎-後測式重複結構 後測式重複結構:測試迴圈結束條件在程式區塊的結尾,所以迴圈的程式區塊至少會執行一次,如右圖所示:
15
If 選擇敘述 若條件式為true,執行敘述區塊。若條件式為false,則跳過敘述區塊。(如果區塊內只有一個敘述,則大括弧可省略)
,則輸出訊息. if(條件式) { //程式敘述 }
16
範例2 判斷整數的奇偶數: int i; //將字串轉換成整數 i = Integer.parseInt(args[0]);
if(i%2 == 0) System.out.println(i+“為偶數。”); if(i%2 == 1) System.out.println(i+"為奇數。"); 程式於程式區\java(1)\Ch04\Ch04_03.java
17
練習一 測試下列程式碼: boolean a = true, b = false; if (b = a )
System.out.println("b=a是將a(true)設定給b"); System.out.println("a = "+a); System.out.println("b = "+b) 程式於程式區\java(1)\Ch04\Ex04_01.java
18
if/else敘述基本用法 若條件式為true,執行區塊敘述一;若條件式為false,執行區塊敘述二。(如果區塊內只有一個敘述,則大括弧可省略) if/else 的流程圖 if(條件式){ //區塊敘述一 } else{ //區塊敘述二
19
範例3 判斷整數的奇偶數 int i; //將字串轉換成整數 i = Integer.parseInt(args[0]);
if(i%2==0) System.out.println(i+"為偶數。"); else System.out.println(i+"為奇數。"); 程式於程式區\java(1)\Ch04\Ch04_04.java
20
if/else的巢狀結構 兩層巢狀 if/else 的可能情況
21
範例4 某電影院規定,12歲以下禁止觀看,12歲以上女性門票50元,12歲以上男性門票60元
22
範例4 某電影院規定,12歲以下禁止觀看,12歲以上女性門票50元,12歲以上男性門票60元 int age, sex;
System.out.println("請傳入兩個參數:年齡和性別"); System.out.println("性別以 0(女生)和 1(男生)表示"); age = Integer.parseInt(args[0]); //將字串轉換成整數 sex = Integer.parseInt(args[1]); if(age>=12) { if(sex==0) System.out.println("女生票價為 50 元"); else System.out.println("男生票價為 60 元"); } System.out.println("年紀太小,不准進入。"); 程式於程式區\java(1)\Ch6\EX4_5_1.java
23
範例4結果
24
if/else巢狀結構 轉換成績程式: 100-90:A 89-80:B 79-70:C 69-60:D 59- 0:F
25
if/else巢狀結構 此方法平均效能較不好: 若現有100個成績, 此方法共要比對100*5次 平均每一筆資料比對5次
int n, char g; if (n >= 90) g = ‘A’; if (n < 90 && n >= 80) g = ‘B’; if (n < 80 && n >= 70) g = ‘C’; if (n < 70 && n >= 60) g = ‘D’; if (n < 60) g = ‘F’; 此方法平均效能較不好: 若現有100個成績, 此方法共要比對100*5次 平均每一筆資料比對5次
26
if/else巢狀結構
27
if/else巢狀結構 此方法的平均效能較好: 例如: 有20個人成績為90分以上 則其比對次數為20*1 if(n>=90){
有20個人成績為80~89 則其比對次數為20*2 有20個人成績為70~79 則其比對次數為20*3 有20個人成績為60~69 則其比對次數為20*4 有20個人成績為60分以下 則其比對次數為20*5 100筆資料的平均比對次數為 ( )/100 = 3 此法最差為5次,最好為1次 if(n>=90){ g=‘A’; }else if(n>=80){ g=‘B’; }else if(n>=70){ g=‘C’; }else if(n>=60){ g=‘D’; } else g=‘F’;
28
尋找伴侶的else else 配對時,應由前面的先配對 else 先和最靠近自己的 if 配對 若最靠近的 if 已經配對了,則找次靠近者
29
練習二 傳入三個整數,列出其中最大者 百貨公司週年慶,給消費者的折扣為: 2000元以下:打九折 滿2000元:打八五折
滿3000元:打8折 滿5000元:打七折 程式於程式區\java(1)\Ch04\Ex04_02_01.java 和 Ex04_02_02.java
30
Switch 選擇敘述 為多選一敘述語法 switch (鍵值){ case 條件值1: // 區段1敘述 break;
// 區段1敘述 break; case 條件值2: // 區段2敘述 …… case 條件值N: // 區段N敘述 default: // default區段敘述 }
31
Switch 選擇敘述 流程圖: 執行switch敘述時,會先求得鍵值,接著將鍵值和條件值1做比對,如果兩值相等,則執行區段1敘述, 接著遇到break 之後,離開switch敘述,如果兩值不相等則再往下比對。 如果鍵值和所有的條件值都不相等,則執行default
32
Switch 選擇敘述 使用switch敘述時應注意的事項
鍵值必須為可自動轉換成int的型別;例如:byte, short, char, int.而long, float, double不行 鍵值會和所有 case 標籤一一比對。 case 後面只能接常數或是常數的運算式,不能包含變數。 當鍵值和所有 case 標籤比對過,而且沒有符合的 case 標籤時,default 標籤以下的敘述會被執行。 case 和 default 視為標籤,其順序沒有限制。 .
33
Switch 選擇敘述 Case和default搭配(:)是特殊標籤,它們的功能是將switch 區塊內的敘述分區,switch透過鍵值可以決定從哪個標籤開始執行敘述。 default部份在switch 敘述中是選擇性的,可有可無,而且不一定要放在最後面 在switch敘述中,每個單元的開頭是case,而結尾通常是break Case後面敘述沒有使用大括弧包起來,因此,case與case間並不是區塊,所以需要break跳離switch結構
34
break敘述 沒有break時,繼續往下執行,並忽略標籤
35
範例5 在此程式中,default被放在 Switch之頭,在所有case之前, 程式得一樣的結果 case 7: g='C';
break; case 6: g='D'; } System.out.println("等第: "+g); 在此程式中,default被放在 Switch之頭,在所有case之前, 程式得一樣的結果 將分數轉換為等第: int n; char g; //將字串轉換成整數 n = Integer.parseInt(args[0]); switch(n/10){ default: g='F'; break; case 10: case 9: g='A'; case 8: g='B'; 程式於程式區\java(1)\ch7\EX4_8.java
36
範例5結果
37
練習三:測試“無break” 承上題,執行下列程式並預測其結果: switch(n/10){ default: g='F';
System.out.println("等第: "+g); case 10: case 9: g='A'; case 8: g='B'; case 7: g='C'; case 6: g='D'; System.out.println("等第: "+g); } 程式於程式區\java(1)\Ch7\EX7_1.java
38
練習三:測試“無break”結果
39
範例6 輸入一個字元,輸出相對應的字元 char choice; if(args.length<1) {
System.out.println(“請傳入參數,以點選你要的水果”); System.out.println("(a)Apple (b)Banana (c)Coconut"); System.exit(0); //離開程式 } 程式於程式區\java(1)\ch7\EX4_7.java
40
範例6 choice = args[0].charAt(0);//取得第一個參數的第一個字元 switch(choice){
case 'a': System.out.println("你點了 Apple"); break; case 'b': System.out.println("你點了 Banana"); case 'c': System.out.println("你點了 Coconut"); default: System.out.println(“你沒點水果”); }
41
練習四 (以switch..case) 百貨公司週年慶,給消費者的折扣為: 2000元以下:打九折 滿2000元:打八五折
滿3000元:打8折 滿5000元:打七折 計算輸出應付金額 程式於程式區\java(1)\Ch7\EX7_2.java
42
練習四結果
Similar presentations