2-6
標準鍵盤輸入
內容:
2-6-1
標準輸入套件
- java.io VIDEO
雖然 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
範例研討:捐款收據印出 VIDEO
( 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
自我挑戰:簡單加法程式 VIDEO
( A )程式功能: PM2_3.java
請編寫一程式,程式會要求使用者輸入兩的整數,再計算兩數的和,並輸出計算結果其執行結果。程式執行範例如下:
請輸入第一個整數
= > 45
請輸入第二個整數
=> 65
45 + 65 = 110
( B )製作技巧提示:
首先宣告鍵盤輸入物件( keyin ),再由鍵盤輸入兩個整數( value1 、 value2 ),計算並輸出兩者相加( 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
自我挑戰:加油站計費 VIDEO
(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 );
//
捨棄小數點
…..