網頁

2013年9月3日 星期二

Ch1_5 取得使用者輸入使用Scanner和BufferedReader

要取得使用者於文字模式下的輸入,最基本的方式就是使用標準輸入的方式。

使用者輸入使用Scanner
java.util.Scanner是Java SE中的標準類別,要建立java.util.Scanner的實例必須使用以下語法:

java.util.Scanner scanner=new java.util.Scanner(System.in);

在建立Scanner實例時,必須給他一個System.in作為參數,這是因為實際取得輸入的工作,仍是System.in在進行,如果你要取得一個整數,只要告訴Scanner,Scanner則會命令System.in取得輸入,並將輸入作轉換,再將結果傳給你。

在建立Sanner實例之後,要進行形態轉換可以使用下列語法:
  • nextInt()         可將使用者輸入轉換為int型態。
  • nextShort()     可取得使用者輸入Short型態。
  • nextLong()      可取得使用者輸入Long型態。
  • nextDouble()  可取得double型態的輸入。
  • next()             可將使用者輸入String型態。
  • .........
範例


結果

如果Scanner無法將使用者的輸入轉換為指定的資料型態,則程式就會發生錯誤。
還有要注意的是使用Scanner的next()取得輸入的依據是空白字元,如果在輸入中間有空白字元則空白字元以後的輸入將不會取得,而程式就會出現錯誤。


使用Scanner來取得使用者的輸入很方便,但是它以空白來區隔每一個輸入字串,在有些時候並不方便,因為使用者可能輸入一個字串,中間會包括空白字 元,而您希望取得完整的字串。這個時候就可以使用BufferedReader。


使用者輸入使用BufferedReader
BufferedReader在建構時接受一個Reader物 件,在 讀取標準輸入串流時,會使用InputStreamReader它 繼承了 Reader類別,使用以下的方法來為標準輸入串流建立緩衝區物件: 

BufferedReader buf = new BufferedReader( new InputStreamReader(System.in));

可以在學過物件導向之後再回來看這一段,不過要記得BufferedReader來取得使用者的輸入都是這麼寫的

範例


範例程式
  • Ch1_5 .java



package chapter;

public class Ch1_5 {
    public static void main(String[] args) {
        java.util.Scanner scanner = new java.util.Scanner(System.in);
        System.out.print("請輸入訊息");
        String s = scanner.next();
        System.out.print("輸入整數");
        int input1 = scanner.nextInt();
        System.out.print("輸入浮點數");
        double input2 = scanner.nextDouble();
        System.out.print("輸入布林值");
        boolean input3 = scanner.nextBoolean();
        System.out.print("=====開始取得輸入=======");
        System.out.println("訊息輸入" + s);
        System.out.println("整數輸入" + input1);
        System.out.println("浮點數輸入" + input2);
        System.out.println("布林值輸入" + input3);
    }

}
  • Ch1_5_1 .java
package chapter;

import java.io.*;

public class Ch1_5_1 {
    public static void main(String[] args) throws IOException {
        BufferedReader buf = new BufferedReader(
                new InputStreamReader(System.in));
        System.out.print("請輸入訊息: ");
        String s = buf.readLine();
        System.out.println("您輸入的訊息: " + s);
    }
}



沒有留言:

張貼留言