第四章 順序與分歧流程
(1) 程式(Program)即是要求電腦執行工作的一份詳細企劃書。設計師製作程式時,除了期望達成目標之外,也須考慮可能發生的其他異常狀況,事先規劃狀況發生時應如何處理。為了製作各種可能出現狀態,一般程式語言可下列三種敘述流程:
(2) 順序性流程:將敘述句由上往下依照順序排列。電腦按部就班地執行完一個敘述句後,緊接著執行下一個敘述句,一直到所有敘述句執行完畢為止。
(3) 選擇性流程:選擇性敘述句(if/else)會判斷某一種條件是否成立,成立與否可能執行不同的敘述;程式結束後,某些敘述可能不會被執行到。
(4) 重複性流程:重複性敘述句亦會判斷某一條件是否成立,條件成立的話,則重複執行某敘述區塊;條件不成立,則停止該敘述運作。
本章將介紹順序與選擇性敘述,至於重複性敘述於下一章(第五章)介紹。
4-2 順序性流程
將若干條敘述句(Statement)由上往下排列,每一行編寫一條敘述句並以一個『分號』(;)表示結束。電腦接收到程式後,將依序由上往下執行程式內每一條敘述句,如圖 4-1 所示。

圖 4-1 順序性敘述的範例
許多程式語言(如 Java 或 C),並沒有要求一個敘述命令需要單獨一行排列,而是以一個『分號』(;)表示一個敘述的結束。也就是說,一個敘述句可能佔用多行;或是,一行裡存放多個敘述句,但每一個敘述句都是以分號表示結束。
(A)程式功能:Ex4_1.java
請製作一套具有列印購物清單功能的超商收銀機。假設該收銀機僅允輸入三種貨品的購買數量,並會顯示該貨品的數量;使者輸入客戶購買數量後,系統會計算總金額及印出清單,操作介面如下:
百事可樂(每瓶 15 元) 購買數量 =>5 國民便當(每盒 45 元) 購買數量 =>2 約翰走路(每瓶 312 元) 購買數量 =>2
*** 列印購物清單 *** ------------------------------------------------------------------- | 品名 | 單價 | 數量 | 小計 | ------------------------------------------------------------------- | 百事可樂 | 15 | 5 | 75 | | 國民便當 | 45 | 2 | 90 | | 約翰走路 | 312 | 2 | 624 | ------------------------------------------------------------------ | 總計 | 789 | ------------------------------------------------------------------ |
(B)製作技巧分析:
乍看起來,本範例好像不合乎實際情況,購物清單應該由印表機輸出才對,哪有由螢幕輸出的現象;其實在編寫程式時,無論是螢幕或印表機輸出格式都是相同的,只不過設定輸出設備不同而已。本範例僅利用順序敘述句即可達成,較困難的地方是,如何將清單排列整齊;吾人可利用跳『Tab』(\t)空白格的小技巧,將某些文字固定於特定位置。
(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 36 |
// Ex4_1.java
import java.util.Scanner; public class Ex4_1 { public static void main(String args[]) { Scanner in = new Scanner(System.in); int total, sum1, sum2, sum3, value; int item1, item2, item3;
System.out.printf("百事可樂(每瓶 15 元) 購買數量 =>"); item1 = in.nextInt(); sum1 = item1 * 15;
System.out.printf("國民便當(每盒 45 元) 購買數量 =>"); item2 = in.nextInt(); sum2 = item2 * 45;
System.out.printf("約翰走路(每瓶 312 元) 購買數量 =>"); item3 = in.nextInt(); sum3 = item3 * 312;
total = sum1+sum2+sum3; System.out.printf("\n *** 列印購物清單 ***\n"); System.out.printf("------------------------------------------------------------------\n"); System.out.printf("| 品名 \t| 單價 \t| 數量 \t| 小計 \t |\n"); System.out.printf("------------------------------------------------------------------\n"); System.out.printf("| 百事可樂\t| 15 \t| %d \t| %d \t |\n", item1, sum1); System.out.printf("| 國民便當\t| 45 \t| %d \t| %d \t |\n", item2, sum2); System.out.printf("| 約翰走路\t| 312 \t| %d \t| %d \t |\n", item3, sum3); System.out.printf("------------------------------------------------------------------\n"); System.out.printf("| 總計 \t| %d \t \t \t |\n", total); System.out.printf("------------------------------------------------------------------\n"); } } |
(D)程式重點分析:
第 11 行:『item1 = in.nextInt(); sum1 = item1 * 15;』。此行有兩只敘述句,每一敘述句利用『分號』(;)表示結束。基本上,每一行允許多個敘述句,前面敘述句執行完,再執行後面的,一直到該行敘述句做完,再跳至下一行執行。
第 23 行:『System.out.printf("| 品名 \t| …. 小計 \t |\n");』。利用許多『\t』將所欲列印的縱行(|)固定於特定位置上。
第 25、26 行:『System.out.printf("| 百事可樂\t| ….. \t |\n", item1, sum1);』。此敘述句太長佔用了兩行,最後以分號(;)表示結束。
雖然可以任意指定變數名稱,來存放各項資料,但一般公司都希望所儲存的資料能夠在不同系統之間相互享用,所代表資料的變數名稱與資料型態,則必須統一規定才可達成。因此,公司大多會指定每一種資料的名稱與型態,公佈並要求程式設計師依照此標準編寫程式。我們以一個美體公司做個簡單的範例,來觀察一般公司指定變數型態的方法如何。
(A)程式功能:PM4_1.java
請您幫『春嬌美體公司』建立一套客戶資料登錄系統,該系統以交談方式詢問客戶資料,輸入完後在螢幕上顯示客戶資料;客戶資料包含有:姓名(String name;)、性別(int sex; (1 表男性;0 表女性))、年齡(int age;)、地址(String address;)、身高(float tall;)、體重(float weight;)。期望操作介面如下:
請輸入客戶姓名 =>張大智 請輸入客戶性別(男: 1, 女: 0) =>1 請輸入客戶年齡 =>22 請輸入客戶地址 =>高雄市鳥松區澄清路 840 號 請輸入客戶身高 =>175 請輸入客戶體重 =>72
列印客戶資料如下: 客戶姓名 = 張大智 姓別 = 1 (1:男 0:女) 年齡 = 22 地址 = 高雄市鳥松區澄清路 840 號 身高 = 175.00 體重 = 72.00 |
(B)製作技巧提示:
首先設定客戶資料的名稱與型態,再分別讀入與輸出,程式提示如下:
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 |
…. /* 規劃資料的名稱與型態 */ String name; // 姓名 int sex; // 性別 (1:男, 0:女) int age; // 年齡 String address; // 地址 float tall; // 身高 float weight; // 體重 …… /* 輸入客戶各項資料 */ System.out.print("請輸入客戶姓名 =>"); name = keyin.nextLine(); …… System.out.printf("請輸入客戶年齡 =>"); age = keyin.nextInt(); keyin.nextLine(); // 清除輸入 enter …. /* 列印客戶資料 */ System.out.printf("\n列印客戶資料如下: \n"); System.out.printf("客戶姓名 = %s\n", name); System.out.printf(" 姓別 = %d (1:男 0:女)\n", sex); …… |
(C)擴充程式功能:
雖然變數 sex = 1 表示男性;sex=0 為女性,這僅針對資料儲存較為方便而已;資料輸出時,還是能夠確實表示『男』或『女』較為理想,而不要用 0 與 1 來取代,可稍修上述提示即可達成,如下:
…… if (sex == 1) System.out.printf(" 姓別 = 男性\n"); else System.out.printf(" 姓別 = 女性\n"); …… |
4-3 條件判斷式
程式執行當中,期望測試某些現象是否發生,再決定如何處理下一步驟的話,則需仰賴條件判斷式來達成。也就是說,程式當中可加入某些條件判斷式,測試是否發生某種特殊現象。經由判斷式運算處理後,有兩種輸出結果:『真』(True)或『假』(False),前者表示條件成立;後者為條件不成立。
一般程式語言的比較判斷式大致上可區分為:數值比較、字元比對與條件邏輯組合等三類,以下分別介紹之。
兩數值之間比較判斷是否大於(>)、小於(<)、大於或等於(>=)...等等等。得到一個『真』(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
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); } |
(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 敘述的條件是否成立,皆會執行到該敘述句。
(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; ….. |
4-5 if/else 敘述與 Random 亂數產生
if/else 敘述句的特點是條件成立與否,都需各自執行所屬的敘述區塊,『yes body』或『else body』。圖 4-3 為 if/else 敘述的流程圖;程式進入該敘述後,首先判斷條件是否成立,成立的話則執行『 Yes』實體(yes body)敘述區塊;否則執行『else』 實體(else body)敘述區塊。分別執行完敘述區塊後,立即離開 if/else 敘述句。另一個重點是,如果區塊內僅有一行敘述句的話,則左右大掛號({ …})可以省略。if/else 敘述的語法與範例如下:

圖 4-3 if/else 敘述的流程圖
if/else 敘述語法: |
範例: |
if (條件判斷) { //(Yes body) Statement 1; … } else { //(Else body) Statement 1; …. } |
if (value1 == value2) { System.out.printf("答對了 您好棒 !!"); … } else { System.out.printf("答錯了 加油!!\n"); …. } |
亂數的應用很多,賭場裡看得到的賭具多半與亂數有關,台灣從早期的瘋狂大家樂到現在合法的樂透彩也都是亂數的應用。
既然亂數是一種不可計算的數,它又如何能被設計?所以在數學上所產生的亂數也只能算是虛擬亂數,也就是自然界根本不存在真正的亂數,當然若產生的亂數已超過能歸納的規則,我們也可以將它視之為「真正的亂數」。在 Java 中,有一個專門產生亂數的類別—Random類別,它是 java.util 套件中的一個類別,所以使用上,除了要匯入 java.util.Random(或 java.util.*) 外,還要產生物件才可以使用,語法如下:
import java.util.*; ….. Random random = new Random(); int ran1 = random.nextInt(9); …… |
上述語法說明如下:
import java.util.*:表示導入 java.util 套件下所有類別,其中也包含 Random 類別。
Random random = new Random:宣告產生一個 Random 類別的物件,其名稱為 random(如同 int a 的功能)。接者再產生 Random 類別的屬性(new Random),並填入 random 物件變數內(如同 int a = 3 之功能)。
random.nextInt(n):此語法為 random 物件的 nextInt() 方法。執行nextInt(n) 方法,將會產生一個由 0 ~ n-1 的亂數;如沒有指定範圍(nextInt()),則產生整數亂數的範圍介於 –2147483468 ~ 2147483647。然而 nextInt(10),則隨機產生 0 ~ 9 之間一個數值。
Ramdom 其他方法:
nextDouble() |
產生 0.0 ~ 1.0 之間雙倍浮點數 |
nextFloat() |
產生 0.0 ~ 1.0 之間的浮點數 |
setSeed(long seed) |
設定亂數種子為 seed |
nextInt(int n) |
產生 0 ~ n 之間的整數 |
(A)程式功能:Ex4_3.java
請製作一套九九乘法練習系統,系統會隨機出現兩個 1 ~9 的整數,學生將兩值相乘的值輸入,如果正確則系統會出現『您好棒 !!』;否則出現則出現正確答案,並出現『答錯了, 還要多努力哦 !!』。期望系統操作介面如下:
輸入正確答案的結果如下: 請輸入 6 * 3 =18 答對了 您好棒 !!
輸入錯誤答案的結果如下: 請輸入 5 * 7 =42 答錯了 正確答案是 35 多加油哦 !! |
(B)製作技巧研討:
系統要求隨機產生兩個介於1 ~ 9 之間的整數相乘,因此需利用亂數產生器(Random)來達成,系統相乘的結果與使用者輸入兩者相比較,如相同則表示使用者正確,否則不正確。
(C)程式範例:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Ex4_3.java import java.util.*; public class Ex4_3 { public static void main(String args[]) { Scanner keyin = new Scanner(System.in); Random random = new Random(); int ran1 = 1 + random.nextInt(9); int ran2 = 1 + random.nextInt(9); int value1 = ran1 * ran2;
System.out.printf("請輸入 %d * %d =", ran1, ran2); int value2 = keyin.nextInt();
if (value1 == value2) { System.out.printf("答對了 您好棒 !!"); } else { System.out.printf("答錯了 正確答案是 %d 多加油哦 !!\n", value1); } } } |
(D)程式重點說明:
第 3 行:『import java.io.*;』。導入輸入套件(InputStreamReader()、BufferedReader())。
第 4 行:『import java.util.*;』。導入公用程式套件,其中包含 Random 類別。
第 9 行:『Random random = new Random();』。利用 Random 類別產生一個名稱為 random 的隨機亂數物件。
第 10 行:『int ran1 = 1 + random.nextInt(9);』。宣告產生整數變數 ran1。利用亂數物件(random)的整數產生方法,產生一個介於 0 ~ 8 之間的整數(nextInt(9)),再加 1,則成為 1 ~ 9 之間的隨機亂數,最後將其結果存入 ran1 變數內。
第 17~22 行:『if (value1 == value2) { ….} else { ….}』。此為 if/else 敘述句,如果條件成立的話(value1 == value2),則執行 if 實體(if body,列印 "答對了 …"),否則執行 else 實體(else body,列印 "答錯了 …")。
(A)系統功能:PM4_3.java
許多博奕或遊戲方法,都利用擲骰子決定優先順序。請製作一套擲骰子工具,每一個骰子有 6 面(1 ~ 6),每次擲三個骰子。系統會要求擲骰子的人輸入姓名,擲完取得點數記錄,再由對賭的人輸入姓名後擲點,由系統判斷哪一個人贏了此局。期望系統操作介面如下:
請輸入第一個玩家的姓名(開始擲骰子) =>張惠妹 張惠妹 先生/小姐擲骰子是 3 1 4 合計 = 8
請輸入第二個玩家的姓名(開始擲骰子) =>蔡依玲 蔡依玲 先生/小姐擲骰子是 5 4 1 合計 = 10
恭喜 蔡依玲 先生/小姐贏了此局 |
(B)製作技巧提示:
當系統執行讀取命令時(如,user1 = keyin.readLine()),系統會等待輸入,一直到使用者由鍵盤輸入相關資料,並以『Enter』 鍵表示輸入結束,此時系統才會讀取資料並繼續執行其他命令。本範例就是利用這個特性來啟動亂數產生;即是系統要求輸入姓名後,再執行亂數產生器(num1 = 1 + random.nextInt(6)、num2、num3),並計算其總合(sum1 = num1 + num2 + num3);第二個玩家也以相同方法輸入(sum2 = num1 + num2 + num3)。最後比較誰擲的較大(sum1 >= sum2)。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
…. /* 第一個玩家擲骰子 */ System.out.printf("\n請輸入第一個玩家的姓名(開始擲骰子) =>"); user1 = keyin.readLine(); num1 = 1 + random.nextInt(6); num2 = 1 + random.nextInt(6); num3 = 1 + random.nextInt(6); sum1 = num1 + num2 + num3; System.out.printf("%s 先生/小姐擲骰子是 %d %d %d 合計 = %d\n", user1, num1, num2, num3, sum1); /* 第二個玩家擲骰子 */ System.out.printf("\n請輸入第二個玩家的姓名(開始擲骰子) =>"); …… sum2 = num1 + num2 + num3; ….. /* 兩玩家的骰子, 比較誰大 */ if (sum1 >= sum2) System.out.printf("\n恭喜 %s 先生/小姐贏了此局\n", user1); else System.out.printf("\n恭喜 %s 先生/小姐贏了此局\n", user2); …. |
(A)系統功能:PM4_4.java
請製作一套電影院的售票系統,系統會詢問客戶欲購買全票(250 元)、優待票(200 元)與半票(150 元)的數量;隨之輸入客戶所繳納的金額。如果繳納金額大於購票金額的話,則輸出應找零錢(500 元、100 元、50 元與 10 元)的數量;如果不夠則告知客戶,金錢不足請下次再來。期望操作介面如下:
繳納金額足夠的結果如下: 購買全票張數 (250元) =>3 購買優待票張數 (200元) =>2 購買半票張數 (150元) =>2 請輸入客戶繳納金額 =>2000
全票 3, 優待票 2, 半票 2 總計 1450 元, 客戶繳納 2000 元 應找金額 = 550 各種零錢數量如下: 100 元零錢 = 5 張 50 元硬幣 = 1 個 10 元硬幣 = 0 個 5 元硬幣 = 0 個 1 元硬幣 = 0 個 繳納金額不足的結果如下: 購買全票張數 (250元) =>6 購買優待票張數 (200元) =>2 購買半票張數 (150元) =>2 請輸入客戶繳納金額 =>1000
總計 2200, 繳納金額 1000 金額不足請下次再來, 謝謝 !! |
(B)製作技巧提示:
本系統與 3-3-3 節的範例(Ex3_3.java)大同小異,僅增加讀入客戶購票張數,以及計算總金額多寡。吾人可利用『虛擬碼』(Pseudo Code)規劃程式大綱如下:
宣告輸入物件; 宣告相關變數; 顯示全票票價(250 元)並讀入購買張數; 顯示優待票票價(200 元)並讀入購買張數; 顯示半票票價(150 元)並讀入購買張數; 計算購買總計金額; 要求輸入客戶繳納金額,並讀取; 計算應找金額多寡; if (應找金額 >= 0) { 計算各零錢數量; 輸出客戶購買各種票的數量; 輸出總計,以及客戶繳納金額; 輸出應找金額,以及各零錢的數量; } else { 輸出總計,以及客戶繳納金額; 輸出 “歡迎下次再來”; } |
4-6 多重 if/else 選擇分歧
圖 4-4 為多重 if/else 選擇敘述的流程圖,主要功能是能連續測試多種條件是否成立。程式進入多重 if/else 敘述之後,首先判斷第一個條件是否成立,如果成立的話,則執行『yes 區塊』內敘述,之後也離開該敘述句;否則再測試第二個條件(else if),成立的話,則執行『敘述區塊』,之後也離開該敘述句;否則再測試第三個條件(else if)。依此類推,一直到所有條件測試完畢。

圖 4-4 多重 if/else 敘述的流程圖
多重 if/else 敘述句的語法與範例如下:
語法: |
範例: |
if(條件運算式 1) { 條件一成立的敘述區塊 ….. } else if(條件運算式 2) { 條件二成立的敘述區塊 …. } else if (條件運算式 3) { 條件三成立的敘述區塊 ….. } else { 條件全不符合的敘述區塊 ….. } |
if (bmi <= base) { //條件一 …. System.out.printf("您身材太瘦了\n"); …. } else if (bmi >= height) { //條件二 System.out.printf("您身材太胖了\n"); ….. } else { //上述條件都不成立 System.out.printf("您是健美體材\n"); ….. } |
(A)程式功能:Ex4_4.java
美體中心小姐需時常幫客人計算 BMI 值(體重(kg)/身高2(m)),正常值為 18 ~ 24;低於 18 則太瘦,高於 24 則太胖。系統會要求輸入客人體重與身高,則輸出印出該它的 BMI 值,並告知太胖、太瘦或標準體材。期望系統操作介面如下:
太胖的結果如下: == 歡迎使用 BMI 評估系統(18 ~ 24) == 請輸入客戶身高(公分) =>170 請輸入客戶體重(公斤) =>80
客戶 BMI 值 = 27.6817 您身材太胖了, 需要減重 == 系統結束, 歡迎再次光臨 == 太瘦的結果如下: == 歡迎使用 BMI 評估系統(18 ~ 24) == 請輸入客戶身高(公分) =>170 請輸入客戶體重(公斤) =>45
客戶 BMI 值 = 15.5709 您身材太瘦了, 需要增胖 == 系統結束, 歡迎再次光臨 == 標準身材的結果如下: == 歡迎使用 BMI 評估系統(18 ~ 24) == 請輸入客戶身高(公分) =>170 請輸入客戶體重(公斤) =>60
客戶 BMI 值 = 20.7612 恭喜您有一個健美體材 == 系統結束, 歡迎再次光臨 == |
(B)製作技巧研討:
我們利用虛擬碼來設計該程式的製作技巧,如下:
宣告輸入物件; 宣告相關變數; 讀入客戶身高與體重(toll、weight); 計算客戶 bmi = weight / (toll * toll); 輸出顯示客戶 BMI 值; if (bmi < 18.0) 輸出告知客戶身材太瘦; else if (bmi > 24.0) 輸出告知客戶身材太胖; else 輸出告知客戶身材健美; 輸出顯示歡迎再度光臨; |
(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 |
// Ex4_4.java
import java.util.*; public class Ex4_4 { public static void main(String args[]){ Scanner keyin = new Scanner(System.in); final double base=18.0, height=24.0; double toll, weight, bmi;
System.out.printf("== 歡迎使用 BMI 評估系統(18 ~ 24) ==\n"); System.out.printf("請輸入客戶身高(公分) =>"); toll = keyin.nextDouble() / 100; System.out.printf("請輸入客戶體重(公斤) =>"); weight = keyin.nextDouble(); bmi = weight / (toll * toll);
System.out.printf("\n客戶 BMI 值 = %.4f\n", bmi); if (bmi <= base) System.out.printf("您身材太瘦了, 需要增胖\n"); else if (bmi >= height) System.out.printf("您身材太胖了, 需要減重\n"); else System.out.printf("恭喜您有一個健美體材\n"); System.out.printf("== 系統結束, 歡迎再次光臨 ==\n"); } } |
(D)程式重點分析:
第 8 行:『final double base=18.0, height=24.0;』。一般程式設計師大多會將特定數值宣告成『固定變數』(final),當環境變遷需要修改數值內容時,僅變更固定變數,其他程式內容就不需要優改。;本敘述句宣告產生 base 與 height 兩固定變數(double 型態),並分別填入 18.0 與 24.0,並限制不可再變更其內容。
第 19~25 行:『if .. else if …』。多重 if/else 敘述句。
(A)程式功能:PM4_5.java
美體中心僅利用 BMI(=(體重(kg)/身高2(m))告知客戶是否太瘦或太胖,並不能滿足公司的要求(公司目的要客戶購買塑身課程)。請您修改 Ex4-4.java 系統,使其能告知客戶太胖時,應該減重多少公斤;或太瘦時應該增胖多少公斤,才合乎健康美麗的身材(客戶身高大多無法改變)。期望操作介面如下:
太胖的結果如下: == 歡迎使用 BMI 評估系統(18 ~ 24) == 請輸入客戶身高(公分) =>170 請輸入客戶體重(公斤) =>80
客戶 BMI 值 = 27.6817 您身材太胖了, 需要減重 10.64 公斤 == 系統結束, 歡迎再次光臨 == 太瘦的結果如下: == 歡迎使用 BMI 評估系統(18 ~ 24) == 請輸入客戶身高(公分) =>170 請輸入客戶體重(公斤) =>50
客戶 BMI 值 = 17.3010 您身材太瘦了, 需要增胖 2.02 公斤 == 系統結束, 歡迎再次光臨 == 標準身材的結果如下: == 歡迎使用 BMI 評估系統(18 ~ 24) == 請輸入客戶身高(公尺) =>170 請輸入客戶體重(公斤) =>60
客戶 BMI 值 = 20.7612 恭喜您有一個健美體材 == 系統結束, 歡迎再次光臨 == |
(B)製作技巧提示:
客戶太胖或太瘦應該增重或減重的計算公式如下:
(1) 太胖(BMI > 24):減重量 = 原體重 – 24*身高*身高;
(2) 太瘦(BMI < 18):增重量= 18*身高*身高 – 原體重;
程式重點提示如下:(虛擬碼)
if (BMI < 18){ 增重量 = 18*身高*身高 – 原體重; 輸出告知客戶身材太瘦,應增加 %增重量 公斤; } else if (BMI > 24) { 減重量 = 原體重 – 24*身高*身高; 輸出告知客戶身材太胖,應減少 %減重量 公斤; } else 輸出告知客戶身材健美; |
(A)系統功能:Ex4_5.java
市面上出現許多醫療診斷系統,使用者輸入身體狀況可大略告知可能邏患哪種疾病。我們建立一個雛型診斷系統,功能如下:

簡單說明一下,如果發燒又咳嗽,又感覺疲倦,則應該是『感冒』症狀。另一條敘述推論是有發燒、沒有咳嗽但有高血壓,而且會感覺口乾,則可能是得『肝病』;其他推論敘述也大多如此。期望操作介面如下:
狀況一,結果如下: 歡迎使用醫療診斷系統, 請依序回答問題 ===================================== 請問您最近是否發燒 (y/n) =>y 請問您最近是否咳嗽 (y/n) =>y 請問您最近是否感覺疲倦 (y/n) =>n 請問您是否血壓升高 (y/n) =>y 請問您最近是否口乾 (y/n) =>y 先生/小姐您可能得肝病 !!!
狀況二,結果如下: 歡迎使用醫療診斷系統, 請依序回答問題 ===================================== 請問您最近是否發燒 (y/n) =>y 請問您最近是否咳嗽 (y/n) =>y 請問您最近是否感覺疲倦 (y/n) =>n 請問您是否血壓升高 (y/n) =>n 請問您最近是否盜汗 (y/n) =>y 先生/小姐您可能得肺病 !!! |
(B)製作技巧研討:
一般推論系統裡大多包含了許多規則(Rule),每條規則皆是利用 if/else 敘述句來描述。市面上銷售的推論系統大多允許使用者利用選單方式來填寫規則,再由系統自動產生 if/else 敘述句,並將所有規則整合成一套系統。基本上,推論系統無所謂準確度如何,完全依賴管理者給它的規則來推論,如果規則設定得越完備,則系統推論結果越細膩;否則它的知識有限,就無法做出正確的判斷。本範例僅以簡單的知識來推論,無關正確與否。
(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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
// Ex4_5.java
import java.util.*; public class Ex4_5 { public static void main(String args[]){ Scanner keyin = new Scanner(System.in); String key; System.out.printf("歡迎使用醫療診斷系統, 請依序回答問題 \n"); System.out.printf("===================================== \n"); System.out.printf("請問您最近是否發燒 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) { System.out.printf("請問您最近是否咳嗽 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) { System.out.printf("請問您最近是否感覺疲倦 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) { System.out.printf("先生/小姐您已經感冒了 !!! \n"); } else { System.out.printf("請問您是否血壓升高 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) { System.out.printf("請問您最近是否口乾 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) System.out.printf("先生/小姐您可能得肝病 !!! \n"); else System.out.printf("有可能僅有感冒而已 ??? \n"); } else { System.out.printf("請問您最近是否盜汗 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) System.out.printf("先生/小姐您可能得肺病 !!! \n"); else System.out.printf("需要由其他系統進一步檢查 !!! \n"); } } } else System.out.printf("有發燒無咳嗽, 請到別科門診 !!!\n"); } else System.out.printf("應該是健康身體 \n"); } } |
(D)程式重點分析:
第 8 行:『String key;』。宣告所欲讀入選擇 y 或 n 存放的變數(key)為字串型態。
第 12 行:『key = keyin.readLine();』。讀入鍵盤輸入字元,並存入 key 變數內。
第 13 行:『if (key.equals("y"))』。判斷 key 變數內容是否與字串『y』相同(equals(“y”))。
(A)程式功能:PM4_6.java
結核病是受『結核菌感染』而引起,是一種慢性傳染病,不會遺傳;可分為『肺結核』與『肺外結核』兩種。政府除了宣導民眾預防結核病傳染之外,並希望製作一套自我檢查是否感染網站,讓不幸感染民眾能提早治療,自我診斷項目如下:
結核菌感染階段 |
病情現象 |
狀況處理 |
|
感染期 |
咳嗽現象:積分 1 |
< 3 未受感染 離開系統 |
>= 3 進入感染期 繼續詢問 |
咳痰現象:積分 1 |
|||
疲倦現象:積分 1 |
|||
體重減輕:積分 1 |
|||
發作期 |
胸悶現象:積分 1 |
< 2 僅受感染 盡快就醫 |
>= 2 進入發病期 繼續詢問 |
胸痛現象:積分1 |
|||
呼吸困難現象:積分 1 |
|||
危險期 |
午後發燒現象:積分 1 |
< 2 已發病 儘快就醫 |
>= 2 進入危險期 需隔離就醫 |
夜間盜汗現象:積分 1 |
|||
咳血現象:積分 1 |
|||
如上表所示,民眾進入系統時,依照『結核病感染期』的病情現象(計 4 條),詢問是否有滿足現象,如果超過 3 項,表示已進入『感染期』,則緊接著『發作期』現象詢問;否則告知民眾沒有感染。『發作期』有 3 個詢問項目,如果低於 2 項,則告知儘快就醫;否則(高於 2 項),請民眾繼續進入『危險期』詢問。『危險期』有 3 個選項,超過兩個現象,則須隔離並儘速就醫。期望操作介面如下:
狀況(一),未受感染的結果如下: 歡迎使用肺結核自我診斷系統, 請回答下列問題 ===================================== === 感染期現象詢問 == 您最近是否咳嗽現象 (y/n) =>n 您最近是否咳痰現象 (y/n) =>n 您最近是否疲倦現象 (y/n) =>y 您最近是否體重減輕 (y/n) =>y 恭喜您, 未受感染
狀況(二),感染未發病的結果如下: 歡迎使用肺結核自我診斷系統, 請回答下列問題 ===================================== === 感染期現象詢問 == 您最近是否咳嗽現象 (y/n) =>y 您最近是否咳痰現象 (y/n) =>y 您最近是否疲倦現象 (y/n) =>y 您最近是否體重減輕 (y/n) =>y
=== 發病期現象詢問 == 您最近是否胸悶現象 (y/n) =>y 您最近是否胸痛現象 (y/n) =>n 您最近是否呼吸困難現象 (y/n) =>n 您僅受感染未發病, 儘快就醫
狀況(三),已進入危險期的結果如下: 歡迎使用肺結核自我診斷系統, 請回答下列問題 ===================================== === 感染期現象詢問 == 您最近是否咳嗽現象 (y/n) =>y 您最近是否咳痰現象 (y/n) =>y 您最近是否疲倦現象 (y/n) =>y 您最近是否體重減輕 (y/n) =>n
=== 發病期現象詢問 == 您最近是否胸悶現象 (y/n) =>y 您最近是否胸痛現象 (y/n) =>y 您最近是否呼吸困難現象 (y/n) =>y
=== 危險期現象詢問 == 您最近是否午後發燒現象 (y/n) =>y 您最近是否夜間盜汗現象 (y/n) =>y 您最近是否呼吸咳血現象 (y/n) =>n 您已進入危險期, 必須隔離並儘快就醫 |
(B)製作技巧提示:
利用虛擬碼提示如下:
清除現象累積選擇項目(status = 0); 詢問及累積計算感染期現象(status = status +1); if (status < 3) { 輸出顯示 "恭喜您, 未受感染"; } else { 清除現象累積選擇項目(status = 0); 詢問及累積計算發病期現象(status = status +1); if(status <2) { 輸出顯示 “您僅受感染未發病, 儘快就醫”; } else { 清除現象累積選擇項目(status = 0); 詢問及累積計算危險期現象(status = status +1); if(status <2) { 輸出顯示 “您已進入發作期, 儘快就醫”; else { 輸出顯示 "您已進入危險期, 必須隔離並儘快就醫"; } } } |
狀態現象詢問程式片段提示如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 |
…… /* 危險期現象詢問 */ System.out.printf("\n=== 危險期現象詢問 ==\n"); status = 0; System.out.printf("您最近是否午後發燒現象 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) status = status + 1; System.out.printf("您最近是否夜間盜汗現象 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) status = status + 1; System.out.printf("您最近是否呼吸咳血現象 (y/n) =>"); key = keyin.nextLine(); if (key.equals("y")) status = status + 1; if (status < 2) System.out.printf("您已進入發作期, 儘快就醫\n"); else System.out.printf("您已進入危險期, 必須隔離並儘快就醫\n"); …… |
4-7 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"); } |
(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 敘述句。
(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 23 24 25 26 |
…… switch(value) { case 1: chinese = "壹"; break; case 2: chinese = "貳"; break; case 3: chinese = "參"; break; ……… case 9: chinese = "玖"; break; case 0: chinese = "零"; break; default: chinese = "錯誤輸入"; } ….. |
4-8 專題研討
(A)系統功能:Ex4_7
瓦斯公司需要一套計費工具,假設天然瓦斯計費標準如下:若度數小於 20,則瓦斯費為 100 元(基本費);若大於 20 度,每度 5 元。期望操作介面如下:
狀況(一),使用度數低於 20 度: 請輸入使用度數 => 15 應繳費用為 => 150 元
狀況(二),使用度數高於 20 度: 請輸入使用度數 => 30 應繳費用為 => 150 元 |
(B)程式範例:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 |
// PM4_7.java import java.util.Scanner; public class Ex4_7{ public static void main(String args[]){ Scanner in = new Scanner(System.in); int number,money=0; System.out.print("請輸入使用度數 => "); number = in.nextInt(); if(number<=20) money = 150; else money = number * 5; System.out.printf("應繳費用為 => %d 元\n",money); } } |
(A)系統功能:PM4_8.java
利用 BMI 判別身材還是有缺點,男女身材標準本來就有所差異,利用相同的公式計算並不合理。簡單計算方法如下:男生標準體重 = (身高 - 80)*0.7; 女生體重 = (身高 - 70)*0.6。請製作一套工具,當輸入客戶性別、身高、體重,再輸出體重是否合乎標準,以及應該減少或增加多少體重。期望操作介面如下:
狀況(一),客戶男性操作結果如下: 請輸入性別(男/女)=>男 請輸入身高(cm)=> 160 請輸入體重(kg)=>56 您的體重符合標準!!
狀況(二),客戶男性操作結果如下: 請輸入性別(男/女)=>女 請輸入身高(cm)=> 170 請輸入體重(kg)=>65 您過重 應該減肥 5.00公斤 |
(B)製作提示:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 |
…. if(sex.equals("男")){ normal = (toll - 80) * 0.7; if(normal != weight){ if(normal<weight) System.out.printf("您過重 應該減肥 %.2f公斤\n",weight-normal); else System.out.printf("您過輕 應該增重 %.2f公斤\n",normal-weight); } else System.out.printf("您的體重符合標準!!\n"); } …. |
(A)系統功能:PM4_9
吾人需要一套計程車收費工具,計費方式為 3 公里內收費 70 元,之後每滿 0.5 公里增加 10 元。操作介面是使用者輸入行駛公里數,則計算並印出應收費用多寡,如下:
狀況(一),低於 3 公里結果如下: 請輸入公里數=>2 搭車費用為 => 70 元
狀況(二),高於 3 公里結果如下: 請輸入公里數=>5.8 搭車費用為 => 120 元 |
(B)製作提示:
01 02 03 04 05 06 |
…. if(number <= 3) money = 70; else money = 70 + (int)(( number - 3 ) / 0.5) * 10; …. |
(A)系統功能:PM4_10.java
美容公會期望公佈一套朔身收費標準,它是依照客人的 BMI 值(體重(kg)/身高2(m))收費,標準身材的 BMI 為 18 ~ 24,低於 18 則太瘦,高於 24 則太胖。收費標準是達標準身材(24 BMI)之間,每減少 0.5 BMI 則收費 1 萬元。並且對客戶身材分類評估如下:
(1) 小於 18.5:過輕(無)
(2) 8.5 ~ 22.9:理想體重(無)
(3) 23.0 ~ 24.9:過重(輕度增加)
(4) 25.0 ~ 29.9:第一度肥胖(中度增加)
(5) 30.0 ~ 34.9:第二度肥胖(重度增加)
(6) 大於 35.0:第三度肥胖(病態肥胖)
期望操作介面如下:
狀況(一),體重過低: 請輸入身高(公分)=>170 請輸入體重(公斤)=>50 您身材過輕(無) 狀況(二),體重過度肥胖: 請輸入身高(公分)=>170 請輸入體重(公斤)=>80 您第一度肥胖(中度過重)需花費 9.00 萬元達成標準身材
狀況(二),體重高度肥胖: 請輸入身高(公分)=>170 請輸入體重(公斤)=>90 您第二度肥胖(重度過重)需花費 16.00 萬元達成標準身材 |
(B)製作提示:
01 02 03 04 05 06 |
…. if (BMI<18.5) System.out.printf("您身材過輕(無)\n"); if (BMI>18.5 && BMI<22.9) System.out.printf("您身材為理想體重\n"); …. |
(A) 系統功能:PM4_11
許多量販店的員工都是利用時薪來計算薪資,每個月工作時數 160 小時(每周 40 小時)內以基本時薪(105元/小時)計算; 161 ~ 205 小時,時薪的 1.5 倍計算,超過 205 小時的工作時間違反勞基法,不給與薪資。請製作一套時薪薪資計算工具,輸入某一員工該月工作時數後,輸出應領薪資多寡,操作介面如下:
狀況(一),時數低於 160 小時: 請輸入該月工作時數 =>140 本月基本薪資如下: 基本薪資 = 14700 加班費 = 0 總共薪資 = 14700 不計費時間 = 0 小時 狀況(二),時數介於 161 ~ 205 小時之間: 請輸入該月工作時數 =>190 本月基本薪資如下: 基本薪資 = 16800 加班費 = 4725 總共薪資 = 21525 不計費時間 = 0 小時 狀況(二),時數高於 205 小時: 請輸入該月工作時數 =>230 本月基本薪資如下: 基本薪資 = 16800 加班費 = 7087 總共薪資 = 23887 不計費時間 = 25 小時 |
(B) 製作提示:
01 02 03 04 05 06 |
…. if (hour <= 160){ hour_1 = hour; total = hour_1 * 105; } …. |
(A) 系統功能:PM4_12.java
請製作一只評量學生學期成績的工具,使用者輸入期中考(30%)、期末考(30%)、以及平時成績(40%)後,系統會依學期總平均評量其等級,如學期總成績高於 90 分則輸出 A 級、80 ~ 90 分為 B 級、80 ~ 70 為 C 級、70 ~ 60 為 D 級,60 分以下為 E 級。期望操作介面如下:
狀況(一),評量為 A: 請輸入期中考成績=>90 請輸入期末考成績=>93 請輸入平常成績=>92 總成績評量為 A 狀況(二),評量為 D: 請輸入期中考成績=>50 請輸入期末考成績=>45 請輸入平常成績=>55 總成績評量為 E |
(A) 系統功能:PM4_13
請製作一套停車場收費系統,計算方式為 0.5 小時內不計費,2 小時內為 50 元,超過 2 小時後,每一小時 20 元計算,不足1 小時以 1 小時計算。期望操作介面如下:
狀況(一),0.5 小時內收費: 請輸入停車時間(小時) => 0.4 不足半小時不收費!! 狀況(二),2 小時內收費: 請輸入停車時間(小時) => 1.8 2小時以內皆為50元!! 狀況(三),超過 2 小時收費: 請輸入停車時間(小時) => 3.2 費用為 : 90 |
(A) 系統功能:PM4_14
請幫電力公司製作一套電費計費工具,電費計算方式如下:
50 度以內,收基本電費 150 元 。
51~100 度,每度電價為 5.0 元 。
101~150 度,每度電價為 6.0 元 。
151~200 度,每度電價為 7.0 元 。
200 度以上,每度電價為 8.0 元 。
使用者輸入客戶消費度數之後,系統會計算出應收電費多寡,期望操作如下:
狀況(一),50 度內收費: 請輸入使用度數=>40 電費應收取 => 150 元 狀況(二),150 度內收費: 請輸入使用度數=>130 電費應收取 => 580 元 狀況(三),超過 200 度收費: 請輸入使用度數=>220 電費應收取 => 1210 元 |
(B) 製作提示:
01 02 03 04 |
…. if((watt>150)&&(watt<200)) money = 150 + 50*5 + 50*6 + (watt-150)*7; …. |
(A) 系統功能:PM4_15
一般銷售人員除了基本薪資(16500 元)外,大多採用銷售額來計算獎金多寡,每月銷售金額 10 萬元以內不給予將金,超過 10 萬元,給予 5000 元獎金,以後每增加 5 萬元,給予 5000 元獎金。系統要求某一員工的銷售額後,計算並輸出該月的薪資多寡。期望操作如下:
狀況(一),銷售金額小於 10 萬元的薪資: 請輸入業務員姓名 =>張先生 請輸入業務員銷售金額(萬元) =>5
列印員工薪資如下: 員工姓名 = 張先生 底薪 = 16500 獎金 = 0 本月薪資 = 16500 狀況(二),銷售金額大於 10 萬元的薪資: 請輸入業務員姓名 =>劉永在 請輸入業務員銷售金額(萬元) =>20
列印員工薪資如下: 員工姓名 = 劉永在 底薪 = 16500 獎金 = 15000 本月薪資 = 31500 |