Java 程式設計(一)  第 二章 Java 程式架構與輸入/輸出  上一頁    下一頁

 

2-6 標準鍵盤輸入

內容:

  • 2-6-1 標準輸入套件 - java.io

  • 2-6-2 範例研討:捐款收據印出

  • 2-6-3 自我挑戰:簡單加法程式

  • 2-6-4 自我挑戰:加油站計費

2-6-1 標準輸入套件 - java.io

雖然 Java 提供有多種輸入/輸出套件,但我們為了方便介紹 Java 語言的操作技巧,我們還是利用最簡單的螢幕輸出與鍵盤輸入。Java 沿用 Unix 系統的定義,將螢幕指定為『標準輸出』與『標準錯誤顯示』;鍵盤為『標準輸入』。前者為『系統輸出』(System.out),後者為『系統輸入』(System.in)。java.io 套件內組裝有系統輸入/輸出方法,但螢幕輸出(printf())較常使用,因此將 System.out 類別延伸套用於 java.lang 套件內,因此呼叫 System.out.* 方法不用再導入 java.io 套件(因 java.lang 套件會被自動導入,但必須書寫 System.out.printf())。

套件 java.io 內包含了許多 IO 輸入/輸出『類別方法』(爾後再介紹),如螢幕、鍵盤、檔案、週邊裝置等等的輸入與輸出類別,其中也製作了多不同存取格式。針對鍵盤輸入還是利用 BufferedReader 類別最為合適,並以 readLine() 方法使用最普遍;但經由 readLine() 方法讀取得到僅是『字串』格式,還需要經由其他類別方法轉換所需的資料型態,較常使用轉換方法如表 2-4 所示(假設輸入物件為 keyin,讀取方法為 keyin.readLine())。

2-4 BufferedReader 類別的輸入方法

輸入方法及格式轉換

功能敘述

keyin.readLine()

讀入一行字串

Integer.parseInt(keyin.readLine())

將讀入字串轉換成整數

Long.parseLong(keyin.readLine())

將讀入字串轉換成長整數

Float.parseFloat(keyin.readLine())

將讀入字串轉換成浮點數

Double.parseDouble(keyin.readLine())

將讀入字串轉換成雙倍浮點數

2-12 為導入 java.io 套件的程式架構,重點說明如下:

 

2-12 導入 java.io 套件

n   import java.io.*;』敘述:表示導入 java.io 套件內所有類別。

n   throws IOException』敘述:引用輸出/輸入類別時,可能會出現異常狀態(Exception),必須指定異常訊息『擲往』(throws)到哪一個類別(IOException)上。

n   BufferedReader keyin = new BufferedReader ()』敘述:宣告產生一個 BufferReader 物件變數,其名稱為 keyin(如同 int a 之功能);接著,利用 new 方法產生一個 BufferedReader 物件並填入 keyin 變數內(如同 int a = 5;)。

n   new InputStreamReader(System.in)』敘述:引用『系統輸入』(System.in,即是鍵盤)物件,產生一個串列輸入讀取器的物件。

n   keyin.readLine()』敘述:引用輸入物件 keyin 內的 readLine() 方法。

2-6-2 範例研討:捐款收據印出

A程式功能:Ex2_6.java

請幫真自在遊民收容所製作捐款收據,功能是系統允許輸入捐款人姓名與金額,之後印出收據,如下所示:

請輸入大德先生/小姐姓名 = >張有名

請輸入捐款金額 =>50000

列印收據如下:

 

****   真自在遊民收容所   捐款收據 ****

 

     感謝 張有名 先生/小姐大德贊助

                捐款 50000 元整

**** 四海之內皆兄弟 順祝 平安快樂  ****

B製作技巧分析:

首先產生鍵盤輸入裝置的物件方法(keyin),再宣告兩個變數,一個儲存姓名的字串變數(String name);另一個儲存金額的整數變數(int value)。由鍵盤輸入姓名與金額後,再利用 printf 函數印出收據,重點是收據格式應該如何設計較雅觀。

C程式範例

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

// Ex2_6.java

import java.io.*;

public class Ex2_6 {

        public static void main(String args[]) throws IOException {

             BufferedReader keyin = new BufferedReader(new

                                 InputStreamReader(System.in));

             int value;

             String name;

             System.out.printf("請輸入大德先生/小姐姓名 = >");

             name = keyin.readLine();

             System.out.printf("請輸入捐款金額 =>");

             value = Integer.parseInt(keyin.readLine());

             System.out.printf("列印收據如下: \n\n");

             System.out.printf("****   真自在遊民收容所   捐款收據 ****\n");

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

             System.out.printf("     感謝 %s 先生/小姐大德贊助\n", name);

             System.out.printf("                捐款 %d 元整\n", value);

             System.out.printf("**** 四海之內皆兄弟 順祝 平安快樂  ****\n");

          }

}

D程式重點說明:

n   6~7 行:宣告產生一個鍵盤輸入物件,名稱為 keyin

n   11 行:name = keyin.readLine()。執行 keyin 物件的 readLine() 方法,功能使讀取一串文字,並存放於 name 變數內。

n   13 行:value = Integer.parseInt(keyin.readLine())。將由鍵盤輸入的字串,轉換成整數資料,並存入 value 變數內。

n   15~19 行:製作收據的樣式。

2-6-3 自我挑戰:簡單加法程式

A)程式功能:PM2_3.java

請編寫一程式,程式會要求使用者輸入兩的整數,再計算兩數的和,並輸出計算結果其執行結果。程式執行範例如下:

請輸入第一個整數 = >45

請輸入第二個整數 =>65

45 + 65 = 110

B)製作技巧提示:

首先宣告鍵盤輸入物件(keyin),再由鍵盤輸入兩個整數(value1value2),計算並輸出兩者相加(sum)的結果,程式提示如下:

01

02

03

04

05

06

07

08

09

…..

int value1, value2, sum;

             System.out.print("請輸入第一個整數 = >");

             value1 = Integer.parseInt(keyin.readLine());

             System.out.print("請輸入第二個整數 =>");

             value2 = Integer.parseInt(keyin.readLine());

             sum = value1 + value2;

             System.out.printf("%d + %d = %d\n", value1, value2, sum);

…..

2-6-4 自我挑戰:加油站計費

(A)    程式功能:PM2_4.java

請製作一只加油站計算客戶油資,程式功能會顯示目前每公升單價多少,輸入客戶所加多少公升,再計算並顯示費用多寡;操作介面如下:(總額小數點不計)

目前 95 無鉛汽油每公升 28.50

請輸入加油數量 =>30

應收金額 = 855

(B)    製作技巧提示:

雖然執行本程式時,汽油單價是不變的,但為了此程式能應付爾後油價變更時,程式修改越少越好,因此利用一個常數變數(final)儲存單價;日後油價變動僅修改該變數的內容即可。吾人可利用 Scanner 套件讀入所加油的數量,再計算與輸出應收金額多寡;另外,本系統要求不要計算小數點,輸出總金額時,不顯示小數點(%.0f)即可(小數點的資料還是在,只是不顯示而已),程式提示如下:

01

02

03

04

05

06

07

08

09

…..

          final double price=28.5;       // 變數內容不可更改

          double number, total;

    System.out.printf("目前 95 無鉛汽油每公升 %.2f \n", price);

           System.out.printf("請輸入加油數量 =>");

           number = Double.parseDouble(keyin.readLine());

           total = number * price;

           System.out.printf("應收金額 = %.0f \n", total);   // 捨棄小數點

…..

 

翻轉工作室:粘添壽

 

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

 

 

翻轉電子書系列: