在編程時,我們經常需要和用戶互動——比如讓用戶輸入姓名、年齡,或者計算用戶提供的數字。Java 提供了 Scanner 類來輕鬆實現從控制檯讀取用戶輸入。本文將用最簡單的方式,一步步教你如何使用 Scanner 類獲取用戶數據。
一、什麼是 Scanner?¶
Scanner 是 Java 標準庫中的一個工具類,位於 java.util 包下。它能幫我們從控制檯(鍵盤)或文件中讀取數據,比如整數、字符串、小數等。對於初學者來說,最常用的是從控制檯讀取用戶輸入。
二、如何使用 Scanner?¶
使用 Scanner 只需三步:導入包 → 創建對象 → 調用方法讀取數據。
1. 導入 Scanner 類¶
首先,需要告訴 Java 你要使用 Scanner,這需要在代碼開頭導入 Scanner 類。
import java.util.Scanner; // 導入Scanner類,必須放在代碼最上方
2. 創建 Scanner 對象¶
Scanner 對象負責“監聽”控制檯輸入,需要通過 System.in(標準輸入流,即鍵盤)創建:
Scanner scanner = new Scanner(System.in); // 創建Scanner對象
3. 調用方法讀取數據¶
創建對象後,通過 scanner 的不同方法讀取不同類型的數據,比如:
- nextInt():讀取整數(int 類型)
- nextDouble():讀取小數(double 類型)
- nextLine():讀取整行字符串(包括空格)
- next():讀取單個單詞(遇到空格或回車停止)
三、讀取不同類型的數據¶
下面通過具體例子,看看如何讀取常見的數據類型:
1. 讀取整數(int)¶
假設要讓用戶輸入年齡,代碼如下:
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
// 創建Scanner對象
Scanner scanner = new Scanner(System.in);
// 提示用戶輸入
System.out.print("請輸入你的年齡:");
// 讀取整數
int age = scanner.nextInt();
// 輸出結果
System.out.println("你輸入的年齡是:" + age);
// 關閉Scanner(可選,但建議養成習慣)
scanner.close();
}
}
運行效果:
請輸入你的年齡:20
你輸入的年齡是:20
2. 讀取字符串(String)¶
讀取字符串時,next() 和 nextLine() 區別較大,需要注意:
- next():遇到空格或回車停止,只能讀取單個單詞(比如“小明”“張三”)。
- nextLine():讀取整行內容(包括空格),直到用戶按回車(適合姓名、地址等需要空格的場景)。
示例 1:用 next() 讀取字符串
System.out.print("請輸入你的姓名:");
String name = scanner.next(); // 只能讀取“小明”,如果輸入“小明 小紅”,只會讀取“小明”
示例 2:用 nextLine() 讀取字符串
System.out.print("請輸入你的姓名:");
String name = scanner.nextLine(); // 可以讀取“小明 小紅”等整行內容
3. 讀取小數(double)¶
如果需要讀取身高、體重等小數,用 nextDouble():
System.out.print("請輸入你的身高(米):");
double height = scanner.nextDouble();
System.out.println("你的身高是:" + height + "米");
四、完整示例:讀取多類型數據¶
假設要寫一個程序,讓用戶輸入姓名、年齡、身高,然後輸出這些信息:
import java.util.Scanner;
public class UserInfo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 讀取姓名(用nextLine避免空格問題)
System.out.print("請輸入你的姓名:");
String name = scanner.nextLine();
// 讀取年齡(整數)
System.out.print("請輸入你的年齡:");
int age = scanner.nextInt();
// 讀取身高(小數)
System.out.print("請輸入你的身高(米):");
double height = scanner.nextDouble();
// 輸出信息
System.out.println("\n你的信息:");
System.out.println("姓名:" + name);
System.out.println("年齡:" + age);
System.out.println("身高:" + height + "米");
// 關閉Scanner
scanner.close();
}
}
運行效果:
請輸入你的姓名:張三
請輸入你的年齡:20
請輸入你的身高(米):1.75
你的信息:
姓名:張三
年齡:20
身高:1.75米
五、常見問題及解決方法¶
1. 輸入不匹配異常¶
如果用戶輸入的數據類型和程序預期不符(比如讓輸入整數,用戶卻輸入了字母),會拋出 InputMismatchException。
解決:確保用戶輸入的數據類型正確,或用 try-catch 處理異常(進階內容,初學者可暫時忽略,先確保輸入正確)。
2. 緩衝區殘留問題¶
如果先用 nextInt() 讀取整數,再用 nextLine() 讀取字符串,可能會出現“讀取到空字符串”的問題。
原因:nextInt() 讀取整數後,會留下一個“回車符”在緩衝區,nextLine() 會直接讀取這個回車符,導致字符串爲空。
解決:在 nextInt() 後加 scanner.nextLine() 清空緩衝區:
System.out.print("請輸入年齡:");
int age = scanner.nextInt();
scanner.nextLine(); // 喫掉回車符
System.out.print("請輸入姓名:");
String name = scanner.nextLine(); // 此時讀取的是用戶輸入的姓名
六、總結¶
Scanner 是 Java 中最基礎的輸入工具,核心步驟是:
1. 導入 java.util.Scanner;
2. 創建 Scanner 對象 scanner = new Scanner(System.in);
3. 根據數據類型調用 nextInt()/nextLine()/nextDouble() 等方法讀取數據;
4. 用完後關閉 scanner.close()(釋放資源)。
通過簡單示例練習,你很快就能熟練掌握從控制檯讀取用戶輸入的方法!