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

 

4-3 條件判斷式

內容:

  • 4-3 條件判斷式

  • 4-4 分岐流程 - if

    • 4-4-1 if 敘述流程

    • 4-4-2 範例研討:簡單計算器製作

    • 4-4-3 自我挑戰:薪資計算系統

程式執行當中,期望測試某些現象是否發生,再決定如何處理下一步驟的話,則需仰賴條件判斷式來達成。也就是說,程式當中可加入某些條件判斷式,測試是否發生某種特殊現象。經由判斷式運算處理後,有兩種輸出結果:『真』(True)或『假』(False),前者表示條件成立;後者為條件不成立。

一般程式語言的比較判斷式大致上可區分為:數值比較、字元比對與條件邏輯組合等三類,以下分別介紹之。

4-3-1 數值比較

兩數值之間比較判斷是否大於(>)、小於(<)、大於或等於(>=)...等等等。得到一個『真』(true,1)或『否』(false,0)的邏輯結果,常用的數值比較判斷運算子,如表 4-1 所示。

表 4-1 判斷式(假設 value1 = 10、value2 = 5)

判斷式

說 明

範   例

> 

大於

(value1 > value2),則輸出為 true (1)

< 

小於

(value1 < value2),則輸出為 false(0)

==

等於

(value1 == value2),為輸出為 false (0)

!=

不等於

(value1 != value2) 為 true (1)

>=

大於或等於

(value1 >= value2) 為 true (1)

<=

小於或等於

(value1 <= value2) 為 false (0)

4-3-2 字元或字串比對

字元或字串比對與數值比較不同,字元比對必須使用 Character 類別方法,字串則須利用 String 方法;假設 key 被宣告成字元或字串物件,則常用的比對方法如表 4-2 所示。

表 4-2 字元比對方法(假設 key = ‘y’)

判斷式

說 明

範   例

equals()

是否相同

key.equals(“n”),則輸出為 false (0)。

compareTo()

字元比較大小

key.compareTo(“n”),整數輸出之間差異。

length()

字串長度

key.length(),輸出字串內字元長度。

isDigit()

是否數字

key.isDigit(),為輸出為 false (0)。

isLetter()

是否文字

key.isLetterl(),為 true (1)。

isLowerCase()

是否小寫

key.isLowerCase(),為 true (1)。

isSpace()

是否空白格

key.isSpace(),為 false (0)。

4-3-3 條件邏輯組合

當一個判斷式無法滿足條件時,也許需要多個判斷式組合成為一個決定條件。譬如:天氣下雨又颳風的話,則必須穿雨衣,其表示兩種條件都成立,才處理預先制定的事項。組合條件判斷中,每一個判斷式的計算輸出不是 1(true)則是 0(false),再利用特殊邏輯運算子來組合多個判斷式;但經過邏輯運算處理後,輸出也是 0 或 1。表 4-3 為一般程式語言的邏輯運算子。

表 4-3 邏輯運算子

運算式

說 明

範   例

&&

AND(且)

X && Y,X 與 Y 兩條件都成立。

||

OR(或)

X || Y,X 與 Y 只要一個條件成立即可。

!

NOT(否)

! X,X 條件不成立即可。

4-4 分歧流程 - if

4-4-1 if 敘述流程

if 選擇性敘述(Selection statement)的功能是,首先判斷某一條件,如果條件成立的話,則執行某一敘述區塊(或某一敘述);不成立的話,則不做任何事或執行另一敘述區塊。

圖 4-2 為 if 敘述(if statement)的流程控制圖(或稱流程圖),其中『圓形』為敘述句的開始(start)與結束(stop);『菱形』內存放條件判斷式,有成立(yes)與不成立(no)兩種可能性輸出;另外,『矩形』內存放敘述區塊(一連串順序性敘述)。

整體上而言,if 敘述句開始時,進入『條件判斷式』測試條件是否成立,成立則執行『yes』 敘述區塊,然後結束 if 敘述;條件不成立的話,則直接離開,而不執行任何敘述。If 選擇敘述的語法如下:

圖4-2 if 敘述的流程圖

if 敘述語法:

範      例:

if (條件判斷式) {

敘述 1;

敘述 2;

…..

}

if (value > 0) {

float sqrt_value = Math.sqrt(value);

System.out.printf("%.2f 平方根值為 =", value);

System.out.printf("%.2f \n", sqrt_value);

}

4-4-2 範例研討:簡單計算器製作

(A)程式功能:Ex4_2.java

請製作一個求平方根的計算器,但被計算的原數不可以是負數;使用者輸入某一數值後,系統會先測試該值是否大於 0,如正確輸入則計算並輸出其平方根值。並期望系統操作介面如下:

如果輸入值大於零的結果如下:

請輸入一個浮點數 =>4.5

4.50 的平方根值為 = 2.12

程式最後結束了

 

如果輸入值小於零的結果如下:

請輸入一個浮點數 =>-3.5

程式最後結束了

(B)製作技巧研討:

系統要求使用者輸入一個大於零的浮點數,如果正確輸入的話(if 敘述功能),則執行計算均方根函數(Math.sqrt()),否則不予執行。當 if 敘述句完成之後,再執行列印『程式最後結束了』之敘述句。程式流程圖如下:

圖 4-2-1 計算器製作

(C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

// Ex4_2.java

 

import java.util.*;

public class Ex4_2 {    

   public static void main(String args[]) {

      Scanner keyin = new Scanner(System.in);

      double value, squre;

      System.out.printf("請輸入一個浮點數 =>");

      value = keyin.nextDouble();

      if (value > 0) {

          squre = Math.sqrt(value);

          System.out.printf("%.2f 的平方根值為 = %.2f\n", value, squre);

      }

      System.out.printf("程式最後結束了 \n");

   }

}

(D)程式重點分析:

  • 第 9、10 行:顯示要求輸入一個浮點數,讀入後儲存於 value 變數內。

  • 第 11 ~ 14 行:『if (value >0 ) { ….. }』。此為 if 敘述句,如果條件成立的話(value > 0),則執行左右大括號內({ ….. })的程式實體(program body);該實體又稱為『if body』。

  • 第 15 行:『System.out.printf("程式最後結束了 \n")』。緊接著 if 敘述句後下一個敘述句,無論 if 敘述的條件是否成立,皆會執行到該敘述句。

4-4-3 自我挑戰:薪資計算系統

(A)程式功能:PM4_2.java

請幫春嬌美體公司建立一套薪資管理系統。員工薪資必須符合勞委會規定,底薪不可以低於 16800 元,如低於該值則自動調整到最低薪資;加班時數不得高於 45 小時,高於 45 小時則以 45 小時計算;又加班費為原來時薪再增加 1/3 倍(即是原來時薪的 (1 + 1/3) 倍)。該系統允許輸入員工姓名、底薪、加班時數,計算完成後,分別印出該員工姓名、底薪、加班費與應領薪資多寡。期望操作介面如下:

輸入薪資如符合規定,如下

請輸入員工姓名 =>張大智

請輸入底薪 =>24000

請輸入加班時數 =>30

 

列印員工薪資如下:

員工姓名 = 張大智

底薪 = 24000

加班費 = 3998

本月薪資 = 27998

輸入薪資如不符合勞委會規定,如下:

請輸入員工姓名 =>劉明傳

請輸入底薪 =>15000

請輸入加班時數 =>50

 

列印員工薪資如下:

員工姓名 = 劉明傳

底薪 = 16800

加班費 = 4198

本月薪資 = 20998

(B)製作技巧提示:

輸入底薪後,立即判斷是否小於 16800 元,如是的話,就將底薪設定為 16800 元;同樣的,判斷加班時數是否大於 45 小時,成立則設定為 45。另一重點是,計算時薪時,必須將其轉換成點浮點數,最後結果再轉換回整數,如此計算員工較不會吃虧。程式提示如下:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

…..

/* 輸入底薪後,判斷是否低於 16800,如是則設定成 16800 */

System.out.printf("請輸入底薪 =>");

base = keyin.nextInt();

if (base < 16800)

      base = 16800;

 

/* 輸入加班時數,再判斷是否高於 45,如是則設定成 45 */

System.out.printf("請輸入加班時數 =>");

extra = keyin.nextInt();

if (extra > 45)

      extra = 45;

/* 計算加班費,以及應領薪資多寡*/

extra_pay = (int)(((double)base/(30 * 8))*1.333 * extra);

pay = base + extra_pay;

…..

翻轉工作室:粘添壽

 

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

 

 

翻轉電子書系列: