Ch.6 流程控制

6-1 取得使用者輸入

為了讓您更了解各種流程控制語法的作用,並實際對程式輸入資料,讓程式根據各種輸入資料作出不同的反應與輸出結果,在這個小節中,要先告訴您如何從文字模式中取得使用者的輸入。

• 使用標準輸入取得資料

要取得使用者於文字模式下的輸入,最基本(底層)的方式標準輸入就是使用標準輸入( Standard input )System.in 的 read() 方法,然而 read()方法一次只從標準輸入取得一個位元組的資料,且取得的資料是以 int 整數值傳回,程式設計人員必須再作轉換處理,才可以將之轉換為字串或是整數值,而且必須處理 java.io.IOException 例外,對於初學者來說,使用System.in 的 read()並不方便。

• 使用 java.util.Scanner 取得輸入

如果您所使用的是 JDK 5.0,則取得使用者輸入最簡便的方式,就是使用 5.0 中新增的類別:java.util.Scanner。雖然現在還沒有正式介紹如何在 Java 程式中使用已定義好的類別( Class )並新增物件( Object ),不過使用 Scanner 的方式是固定的,初學者暫且無需理會語法的細節。

java.util.Scanner 是 Java SE 中的標準類別,初學者可以先將類別看作是一個產品製造書,如果您要使用某個類別,就根據該類別建立一個實例( Instance ),就好比您根據產品製造書製造一個實際的產品,要建立 java.util.Scanner 的實例,必須使用以下的語法:

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

在建立 Scanner 實例時,必須給它一個 System.in 作為參數,這是因為實際取得輸入的工作,仍是 System.in 在進行的,至於 System.in 實際如何取得輸入,而 Scanner 如何進行轉換等細節,您不用理會,如果您要取得一個整數,只要告訴 Scanner,Scanner 則命令 System.in 取得輸入,並將輸入作轉換,再將結果傳給您。

圖6-1、建立 Scanner 物件協助您取得輸入

詳細了解 Scanner 物件的建立與運作原理並不是初學者現在學習的重點,現階段的學習重點在於學會如何取得使用者的輸入。

在建立 Scanner 實例之後,您可以使用各種 nextXXX()方法(Method)取得各種型態的資料,例如 nextInt()可將使用者輸入轉換為 int 型態,nextShort()可取得 short 型態的輸入,nextDouble()可取得 double 型態的輸入。

重點提示

關於某個類別上可使用的方法說明,可查詢線上API 文件,網址是:http://docs.oracle.com/javase/7/docs/api/例如 Scanner 類別的相關說明,可以在以下的網址找到:http://docs.oracle.com/javase/7/docs/api/index.html?java/util/Scanner.html

程式碼 6.1 示範了如何取得 int 整數、double 浮點數與boolean 型態的輸入,並示範如何使用變數來儲存輸入,並重新顯示這些輸入:

public class ScannerDemo{
    public static void main(String[] args){
        java.util.Scanner scanner = new
                java.util.Scanner(System.in);

        System.out.print("輸入整數:");
        int input1 = scanner.nextInt();

        System.out.print("輸入浮點數:");
        double input2 = scanner.nextDouble();

        System.out.print("輸入布林數:");
        boolean input3 = scanner.nextBoolean();

        System.out.println("整數輸入:" + input1);
        System.out.println("浮點數輸入:" + input2);
        System.out.println("布林數輸入:" + input3);
    }
}

                            
ScannerDemo.java

如果您要儲存 int 型態的輸入,則要使用 int 型態的變數來儲存取得的輸入,要儲存 double 型態的輸入,則要使用 double 型態的變數來儲存取得的輸入,程式碼 6-1 的執行結果如下所示:

圖6-2、程式碼 6-1 的執行結果

如果 Scanner 無法將使用者的輸入轉換為指定的資料型態,則程式就會發生 java.util.InputMismatchException 錯誤,現階段您還沒學到如何處理這個錯誤,所以程式處理這個錯誤的方式就是直接終止程式。