CodeGym /課程 /JAVA 25 SELF /鍵盤輸入

鍵盤輸入

JAVA 25 SELF
等級 2, 課堂 5
開放

1. 從主控台讀取, System.in

在先前的課程中,我們已經認識了將內容輸出到螢幕的指令。為此我們使用了物件 System.out 及其方法 print() 和 println()。簡單又方便。

然而,正如你可能已經猜到的,只能輸出到螢幕並不夠。大多數程式的目標—是為使用者做些有用的事。因此我們常常需要讓使用者能從鍵盤輸入資料。

和輸出一樣,輸入也有專門的物件—System.in。不過可惜的是,它沒有我們想像得那麼好用。這個物件能從鍵盤讀取資料,但一次只能讀取一個字元。

因此我們會再搭配另一個類別,與物件 System.in 一起使用,就能滿足我們的需求。Java 早已為各種情境提供了現成的類別,其中之一就是我們現在要認識的。

2. 類別 Scanner

Scanner 類別(全名 java.util.Scanner)能從多種來源讀取資料:主控台、檔案、網路等。若要讓它從鍵盤讀取,就必須把物件 System.in 作為參數(資料來源)傳給它;至於該怎麼處理,Scanner 物件會自己搞定。

使用型別為 Scanner 的物件從鍵盤讀取,大致會像這樣:

程式碼 說明
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
建立一個 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);
宣告並初始化 Scanner 類型的變數

等號左邊的部分—是宣告一個名為 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 之後,程式才會開始讀取這些數字。

1
任務
JAVA 25 SELF, 等級 2, 課堂 5
上鎖
取得密碼 🔒
取得密碼 🔒
1
任務
JAVA 25 SELF, 等級 2, 課堂 5
上鎖
註冊新玩家 🎮
註冊新玩家 🎮
1
任務
JAVA 25 SELF, 等級 2, 課堂 5
上鎖
計算購物總金額 🛒
計算購物總金額 🛒
1
任務
JAVA 25 SELF, 等級 2, 課堂 5
上鎖
建立數位名片 📇
建立數位名片 📇
1
問卷/小測驗
認識 int 和 String 類型,等級 2,課堂 5
未開放
認識 int 和 String 類型
認識 int 和 String 類型
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION