Java 程式設計(一)  第 三章 算術運算式  上一頁   

 

3-6 專題研討

 內容:

  • 3-6-1 自我挑戰:溫度轉換工具

  • 3-6-2 自我挑戰:手機計費工具

  • 3-6-3 範例研討:登革熱診斷系統(一)

  • 3-6-4 自我挑戰:登革熱診斷系統之二

  • 3-6-5 自我挑戰:憂鬱症自我診斷工具

3-6-1 自我挑戰:溫度轉換工具

(A)系統功能:PM3_5.java

我們需要一套可以轉換溫度攝氏與華式之間的工具,期望操作如下:

*** 攝氏/華式溫度轉換工具 ***

請輸入華式溫度 =>103.5

華氏 103.50 = 攝氏 39.72

請輸入攝式溫度 =>32.1

攝氏 32.10 = 華氏 89.78

(B)製作技巧提示:

首先我們必須了解兩者溫度之間的轉換,華式溫度(F)轉換攝氏溫度(C)公式是(C = (F - 32* 5/9,需包含小數點);攝氏溫度轉(C )換成華氏溫度(F )的計算公式是(F = 32 + (9 * C)/5)。程式片段如下:

01

02

03

04

05

06

07

….

      System.out.printf("*** 攝氏/華式溫度轉換工具 ***\n");   

      System.out.printf("請輸入華式溫度 =>");

      value_F = keyin.nextFloat();

      value_C = (value_F - 32) * 5.0F/9.0F;

….

3-6-2 自我挑戰:手機計費工具

(A)系統功能:PM3_6.java

手機通訊費率大多採用秒數計算,請製作一套計算費率系統。系統要求輸入通話時間是『時 秒』方式(請引用 Scanner 套件),接著系統要求輸入每秒通話費(0.5),則系統需計算出總通話秒數,以及通話費多寡,期望操作介面如下:

*** 手機通話費計算工具 ***

請輸入通話時間(      ) =>2 30 50

通話時間總共 9050

請輸入每秒計費( 0.5) =>0.4

通話費總共 3620

(B)製作技巧提示:

01

02

03

04

05

06

….

      times = (hour * 60 + minute) * 60 + second;

      …..

      total = units * times;

      System.out.printf("通話費總共 %d \n", (int)total);

….

3-6-3 範例研討:登革熱診斷系統()

A)程式功能:Ex3_6.java

高雄地區的登革熱病蚊傳播嚴重,衛生局常要求醫生隨時通報案例發生,同時也鼓勵民眾初步自行診斷是否有被感染,因此期望在網站上公佈一個簡單的診斷工具,如有病情徵兆時,再到醫院進一步檢查。診斷系統要求使用者填入各種徵兆項目,再依照這些參數的比重推論病情可能被感染比例。徵兆項目如下:(假設症狀與事實不完全相符)

  • 發高燒x,比重 a=6)。

  • 筋骨酸痛y,比重 b=3)。

  • 感冒症狀z,比重 c=8)。

  • 貪睡症狀k,比重 d=3)。

上述各種症狀的徵兆數值為(0 ~ 10):不明顯(0)、稍明顯(4)、明顯(6)、很明顯(10)。感染登革熱指數(0 ~ 10 = (x * 6 + y*3 + z*8 + k*3) = (6+3+8+3),指數越高則表示被感染可能性越高,民眾自我診斷之後,再自行判斷是否到醫院確實診治。期望系統的操作介面如下:

*** 登革熱自我診斷系統  ***

請依照程式詢問步驟, 輸入各種症狀明顯度如何 (0 ~ 10)

          : 不明顯(0),稍明顯 (4) 明顯(6),很明顯(10)

請輸入發燒症狀明顯否(0~10) =>5

請輸入筋骨酸痛症狀明顯否(0~10) =>8

請輸入感冒症狀明顯否(0~10) =>6

請輸入嗜睡症狀明顯否(0~10) =>7

 

您感染登革熱指數為(0 ~ 10)= 6.33

B)製作技巧分析:

讀入每一種症狀的明顯度(0 ~ 10),再乘以該症狀的加權比重;將所有症狀明顯度的總合,在除以總加權比重,即可得到感染登革熱的指數為何。

C)程式範例:Ex3_6.java

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

// Ex3_6.java

 

import java.util.*;

public class Ex3_6 {

   public static void main(String args[]){

      Scanner keyin = new Scanner(System.in);

      final int a=8, b=6, c=4, d=3;

      int weights = a+b+c+d;

      int x, y, z, k;

      float value;

      System.out.printf("*** 登革熱自我診斷系統  ***\n");

      System.out.printf("請輸入各種症狀明顯度如何 (0 ~ 10)\n");

      System.out.printf("\t: 不明顯(0),稍明顯 (4) 明顯(6),很明顯(10)\n");

 

      System.out.printf("請輸入發燒症狀明顯否(0~10) =>");

      x = keyin.nextInt();

      System.out.print("請輸入筋骨酸痛症狀明顯否(0~10) =>");

      y = keyin.nextInt();

      System.out.print("請輸入感冒症狀明顯否(0~10) =>");

      z = keyin.nextInt();

      System.out.print("請輸入嗜睡症狀明顯否(0~10) =>");

      k = keyin.nextInt();

 

      value = (float)(x*a + y*b +z*c + k*d)/weights;

      //value=Math.sqrt((a*x*x + b*y*y + c*z*z + d*k*k) /(double)(a+b+c+d));

      System.out.printf("\n您感染登革熱指數為(0 ~ 10)= %.2f\n", value);

   }

}

D)程式重點分析:

  • 8 :『final int a=8, b=6, c=4, d=3;』。設定各項症狀的加權比重值,數值越大表示該症狀對是否感染登革可能性越高。

  • 9 :『int weights = a+b+c+d;』。所有加權比重的總合。

  • 28 :『value = (float)(x*a + y*b + z*c + k*d)/weights;』。利用加權比重計算出感染登革熱指數的多寡。

3-6-4 自我挑戰:登革熱診斷系統 之二

A)程式功能:PM3_7.java

許多疾病的症狀是大同小異的,當民眾到醫院時,醫生診斷病患是否感染登革熱,或是邏患其他疾病,就顯得非常困難。雖然選擇正確的症狀與加權比重,對於判斷的正確性越高,但加權比重的計算方式,也會影響到最後的判斷正確否;請您幫醫生建立一套更精密的計算方式,來提高判斷的正確性。有另一種均方根值的數理推論計算方式,說不定可以提高正確判斷,計算公式如下:

吾人期望的操作介面如下:

*** 登革熱自我診斷系統  ***

請依照程式詢問步驟, 輸入各種症狀明顯度如何 (0 ~ 10)

        : 不明顯(0),稍明顯 (4) 明顯(6),很明顯(10)

請輸入發燒症狀明顯否(0~10) =>5

請輸入筋骨酸痛症狀明顯否(0~10) =>8

請輸入感冒症狀明顯否(0~10) =>6

請輸入嗜睡症狀明顯否(0~10) =>7

 

您感染登革熱指數為(0 ~ 10)= 6.45

B 程式製作提示:

輸出入介面大致上與 Ex3_6.java 相同,我們只要變更感染指數的計算公式即可,程式提示如下:

value=Math.sqrt((a*x*x + b*y*y + c*z*z + d*k*k) /(double)(a+b+c+d));

System.out.printf("\n您感染登革熱指數為(0 ~ 10)= %.2f\n", value);

3-6-5 自我挑戰:憂鬱症自我診斷工具

A)程式功能:PM3_8.java

依照醫學學術單位研究,在這緊張社會環境裡,民眾大多有憂鬱症的傾向;衛生局期望建立一套自行探討系統,能讓國人隨時瞭解自己憂鬱症傾向如何。在網路上公布一套對談選單方式,讓國人自行填入各項參數,再推論憂鬱症傾向比重如何。推論參數如下:各項皆 0 ~ 10 分。

(1) 想哭(比重 5

(2) 情不好(比重 4

(3) 以前更容易發脾氣(比重 5

(4) 我睡不好(比重 3

(5) 我覺得不想吃東西(比重 2

(6) 我覺得想事情或做事情比以前慢(比重 3)

(7) 我比較會往壞的方向想(比重 4

(8) 我覺得身體不舒服(比重 2

(9) 我覺得自己很沒用(比重 3

(10) 我很想不開、甚至想死(比重 5

為了增加系統推論的正確性,提供有兩種演算法,依照上述症狀推論是否邏患憂鬱症,演算法如下:

    • 總和計算:每題 0 ~ 10 分,以總和分數判斷:正常(0 ~ 30)、輕微憂鬱症(30 ~ 60)、明顯憂鬱症(60 ~ 100)(沒有使用比重加權)。

    • 加權比重計算:每題 0 ~ 10,乘以加權比重後的總和,再除以加權的總和(如同學校成績的學分計算方式)。總平均(0 ~ 10)判斷:正常(0 ~ 3)、輕微憂鬱症(3 ~ 6)、明顯憂鬱症(6 ~ 10)。

期望操作介面如下:

*****    憂鬱症自我診斷系統     *****

請依序回答下列問題, 相似度 (0 ~ 10)

不明顯(0), 稍明顯(2), 明顯(6), 很明顯(10)

 

我常覺得想哭(比重 5=>4

我覺得心情不好(比重 4=>3

我覺得比以前更容易發脾氣(比重 5=>9

我睡不好(比重 3=>8

我覺得不想吃東西(比重 2=>8

我覺得想事情或做事情比以前慢(比重 3=>7

我比較會往壞的方向想(比重 4=>9

我覺得身體不舒服(比重 2=>5

我覺得自己很沒用(比重 3=>7

我很想不開、甚至想死(比重 5=>5

 

總合計算 (0 ~ 100), 判斷結果: 正常(0 ~ 30

 輕微憂鬱症(30 ~ 60), 明顯憂鬱症(60~100

您憂鬱症指數為 =>65

 

加權指數計算 (0 ~ 10), 判斷結果: 正常(0 ~ 3

輕微憂鬱症(3 ~ 6), 明顯憂鬱症(6~10

您憂鬱症指數為 =>6.39

 

B)製作技巧提示:

分別讀入各項問題的分數,各項分數的總和(sum1),即是總和計算的判斷法;如分別乘以加權比重,累加其總和(sum2),再除以加權比重的合計(weights),即可加權指數計算方式。提示如下:

……

System.out.printf("\n總合計算 (0 ~ 100), 判斷結果: 正常(0 ~ 30\n");

System.out.printf("\t輕微憂鬱症(30 ~ 60), 明顯憂鬱症(60~100\n");

System.out.printf("您憂鬱症指數為 =>%d\n", sum1);

 

System.out.printf("\n加權指數計算 (0 ~ 10), 判斷結果: 正常(0 ~ 3\n");

System.out.printf("\t輕微憂鬱症(3 ~ 6, 明顯憂鬱症(6~10\n";

System.out.printf("您憂鬱症指數為 =>%.2f\n", (float)sum2/weights);

翻轉工作室:粘添壽

 

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

 

 

翻轉電子書系列: