1. 從主控台讀取, System.in
在先前的課程中,我們已經認識了將內容輸出到螢幕的指令。為此我們使用了物件 System.out 及其方法 print() 和 println()。簡單又方便。
然而,正如你可能已經猜到的,只能輸出到螢幕並不夠。大多數程式的目標—是為使用者做些有用的事。因此我們常常需要讓使用者能從鍵盤輸入資料。
和輸出一樣,輸入也有專門的物件—System.in。不過可惜的是,它沒有我們想像得那麼好用。這個物件能從鍵盤讀取資料,但一次只能讀取一個字元。
因此我們會再搭配另一個類別,與物件 System.in 一起使用,就能滿足我們的需求。Java 早已為各種情境提供了現成的類別,其中之一就是我們現在要認識的。
2. 類別 Scanner
Scanner 類別(全名 java.util.Scanner)能從多種來源讀取資料:主控台、檔案、網路等。若要讓它從鍵盤讀取,就必須把物件 System.in 作為參數(資料來源)傳給它;至於該怎麼處理,Scanner 物件會自己搞定。
使用型別為 Scanner 的物件從鍵盤讀取,大致會像這樣:
| 程式碼 | 說明 |
|---|---|
|
建立一個 Scanner 物件。從鍵盤讀取一行文字。從鍵盤讀取一個數字。 |
看起來不難,但事情真的有這麼簡單嗎?
我想你一定有很多疑問,接下來我們一一解答。
不過在此之前,先來看看一個使用 Scanner 的完整程式範例:
void main()
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
3. 建立物件 Scanner
第一個問題—那一行 Scanner console = new Scanner(System.in); 是什麼意思?
這樣的程式碼可能會讓人困惑,但你會經常遇到類似的寫法。所以現在正是說明它在寫什麼的好時機。
先回想一下,我們平常是如何建立一個文字變數的:
String str = "文字";
我們先寫變數型別(String),再寫它的名稱(str),最後在等號後面寫入值。
在我們那行看起來奇怪的程式碼中,其實也是一樣的結構:
Scanner console = new Scanner(System.in);
等號左邊的部分—是宣告一個名為 console 的 Scanner 型別變數。你也可以把它命名為,例如,s、scanner,甚至 keyboard。那麼程式碼會像這樣:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
我想,現在應該清楚多了。
而等號右邊的程式碼稍微複雜一點。我指的是 new Scanner(System.in); 不過其實也沒什麼高深的。
這段程式是在告訴 Java:建立一個型別為 Scanner 的新物件(關鍵字 new),並把新物件 Scanner 的資料來源—物件 System.in—作為參數傳給它。
當這行執行完後,我們就會有一個名為 console、型別為 Scanner 的變數,程式便能透過它從鍵盤讀取資料。
4. 呼叫方法
在上面的範例中,我們的 console 變數(型別為 Scanner)在內部保存了對一個 Scanner 物件的參考。
若要呼叫變數所參考之物件的方法,只需在變數名稱後寫一個點,然後是方法名稱與參數。這個指令的一般形式如下:
peremennaya.metod(parametry);
範例:
System.out.println("你好");
System.out.println(1);
如果你不打算傳遞任何參數,就要寫上一對空括號:
peremennaya.metod();
範例:
System.out.println();
5. 從主控台輸入資料
當我們擁有型別為 Scanner 的物件時,從鍵盤輸入資料非常簡單。
若要從鍵盤讀取一行字串,需要使用:
String str = console.nextLine();
當程式執行到這一行時,它會暫停並等待使用者輸入並按下 Enter。之後,使用者輸入的所有內容會被存入變數 str。
若要從鍵盤讀取整數,需要使用:
int number = console.nextInt();
這裡與前一個命令的行為相同。當程式執行到這一行時,它會暫停並等待使用者輸入並按下 Enter。之後,輸入內容會被轉換為數字並存入變數 number。
如果使用者輸入的內容無法轉換為整數,程式就會發生錯誤並結束。
若要從鍵盤讀取浮點數,需要使用:
double number = console.nextDouble();
這個命令與 nextInt() 完全類似,只是它會檢查輸入內容能否轉換為 double 型別的數值。
以下是從鍵盤讀取兩個數字並輸出其總和的程式範例:
void main()
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
注意
使用者可以在同一行輸入多個以空白分隔的數字;這種情況會被 Scanner 類別的方法正確處理。不過,只有在使用者按下 Enter 之後,程式才會開始讀取這些數字。
GO TO FULL VERSION