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

 

4-3 條件判斷式

內容:

  • 4-3 條件判斷式

  • 4-4 分岐流程 - if

    • 4-4-1 if 敘述流程

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

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

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

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

4-3-1 數值比較

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

4-1 判斷式(假設 value1 = 10value2 = 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 條件邏輯組合

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

4-3 邏輯運算子

運算式

  

&&

AND(且)

X && YX Y 兩條件都成立。

||

OR(或)

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

!

NOT(否)

! XX 條件不成立即可。

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)程式重點分析:

  • 910 :顯示要求輸入一個浮點數,讀入後儲存於 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 程式設計(一) 含程式邏輯

 

 

翻轉電子書系列: