Java 程式設計(一)  第 四章 順序與分歧流程  上一頁    下一頁

 

4-7 switch/case 選擇分歧

內容:

  • 4-7-1 switch/case 敘述流程

  • 4-7-2 範例研討:多功能計算器製作

  • 4-7-3 自我挑戰:數字轉國字程式

4-7-1 switch/case 敘述流程

switch/case 與多重 if/else 敘述皆是多重條件判斷,兩者處理方式也大致上相同。但如果判斷條件太多時,利用 if/else 敘述編寫,會感到很難閱讀,然而 switch/case 可簡了許多。圖 4-5 switch/case 敘述的流程圖,看起來好像是『多選一』的敘述,其實不然,它也如同多重 if/else 敘述一樣,也會一個條件接著一個條件測試。當某一條件成立時,則執行該條件下(case)的敘述區塊,執行完畢後,並不立即結束該敘述,而會繼續測試下一個條件(此功能與 if/else 不同),也會執行下一條件的敘述。

4-5 Switch/case 敘述的流程圖

一般情況下,大多期望眾多條件中,僅要求合乎其中一個條件,並僅執行該條下的敘述區塊。因此,條件敘述區塊的最後一行,加入『break 敘述,表示符合某一條件,執行完畢後立即離開該 switch/case 敘述。Switch/case 敘述語法與範例如下:

Switch/case 敘述句的語法:

範例:

switch (條件式) {

case 數值 1:

      敘述式 1;

      ….

case 數值 2:

      敘述式 2;

      ……

…..

default:

敘述式;

}

switch(oper) {

case ‘+’:

       result = op1 + op2;

       break;

    case ‘-‘:

       result = op1 – op2;

       break;

    case ‘*’:

       result = op1 * op2;

       break;

   ……

    default:

       System.out.printf("錯誤\n");

}

4-7-2 範例研討:多功能計算器製作

A)系統功能:Ex4_6.java

請製作一個具有加(+)、減(-)、乘(*)與除(/)功能的計算器。譬如輸入 5 + 10 後,系統會輸出 5 + 10 = 15 之樣式。期望操作介面如下:

狀況(),執行除法的結果如下:

== 歡迎使用 +*/ 計算器 ==

請輸入(: 45 + 28) =>45 / 28

45.00 / 28.00 = 1.61

 

狀況(),執行乘法的結果如下:

== 歡迎使用 +*/ 計算器 ==

請輸入(: 45 + 28) =>38 * 12

38.00 * 12.00 = 456.00

B)製作技巧研討:

系統條件需要提供有加、減、乘、除與餘數等五種計算功能。希望系統操作模式能與自然人習慣相符,將運算子置放於兩個運算元中間;也要求運算式必須同一行輸入完畢,如 5 + 10 之格式。系統需要鍵盤一次輸入 3 個元素,第一個為整數,接著是字元符號(+-*/%),最後再一個整數。由此可見,吾人需利用 Scanner 類別套件才可達成,又 Scanner 沒有讀入字元(Char)的物件方法;需利用讀入字串方法(next()),以字串格式讀入後再將其轉換成字元(charAt() 方法)。3 個運算元素都讀入後,再利用 switch/case 選擇到底輸入哪一個運算子,也相對應執行該運算子的運算。

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

// Ex4_6.java

 

import java.util.Scanner;

public class Ex4_6 {    

   public static void main(String args[]) {

       Scanner keyin = new Scanner(System.in);

       float op1, op2, result=0F;

       String oper_st;

       char oper;

       System.out.printf("== 歡迎使用+ - * / 計算器 ==\n");

       System.out.printf("請輸入(: 45 + 28) =>");

       op1 = keyin.nextFloat();

       oper_st = keyin.next();

       oper = oper_st.charAt(0);

       op2 = keyin.nextFloat();

       switch(oper) {

          case ‘+’:

              result = op1 + op2;

              break;

          case ‘-‘:

              result = op1 – op2;

              break;

          case ‘*’:

              result = op1 * op2;

              break;

          case ‘/’:

              result = op1 / op2;

              break;

          default:

              System.out.printf("錯誤輸入\n");

       }

       System.out.printf("%.2f %s %.2f = %.2f\n", op1, oper, op2, result);

    }

}

D)程式重點分析:

  • 11 :『System.out.printf("請輸入(: 45 + 28) =>");』。提示使用者輸入格式如何;輸入運算元後,再接著運算子,最後運算元。

  • 12 :『op1 = keyin.nextInt();』。讀入第一個運算元。

  • 13 :『oper_st = keyin.next();』。以字串格式讀入運算子。

  • 14 :『oper = oper_st.charAt(0);』。取出 oper_st 字串內第 0 個字元,存放於 oper 變數內。其中 charAt() 為字元取出方法。

  • 16~35 :『switch(oper) { case '+' ……}』。Switch/case 敘述句。

4-7-3 自我挑戰:數字轉換國字程式

A)程式功能:PM4_7.java

 客戶到銀行辦理業務時,常需將數字轉成國字再書寫在傳票上,但國字平常很少使用,客戶大多不會,請製作一套數字轉換國字系統,讓客戶直接查詢即可,期望操作介面如下:

狀況(),詢問 3 的結果如下:

== 歡迎使用數字轉換國字系統 ==

請輸入一個整數數字 =>3

3 <=>

 

狀況(),詢問 9 的結果如下:

== 歡迎使用數字轉換國字系統 ==

請輸入一個整數數字 =>9

9 <=>

B)製作技巧提示:

吾人將輸入的數字存放於 value 變數內,再利用 switch/case 處理各種可能數字,並將相對應國字存放於 chinese 變數內。程式片段如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

……

switch(value) {

          case 1:

              chinese = "";

              break;

          case 2:

              chinese = "";

              break;

          case 3:

              chinese = "";

              break;

………

          case 9:

              chinese = "";

              break;

          case 0:

              chinese = "";

              break;

          default:

              chinese = "錯誤輸入";

}

…..

翻轉工作室:粘添壽

 

Java 程式設計(一) 含程式邏輯

 

 

翻轉電子書系列: