Java 輸入 (Input)
Java 使用 Scanner 類別從鍵盤讀取使用者輸入。
建立 Scanner
import java.util.Scanner; // 匯入 Scanner 類別
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入你的名字:");
String name = scanner.nextLine();
System.out.println("Hello, " + name);
scanner.close(); // 關閉 Scanner
}
}
Scanner 方法
| 方法 | 說明 |
|---|---|
nextLine() | 讀取整行字串 |
next() | 讀取一個單詞(到空白為止) |
nextInt() | 讀取整數 |
nextDouble() | 讀取浮點數 |
nextBoolean() | 讀取布林值 |
nextLong() | 讀取 long |
nextFloat() | 讀取 float |
讀取字串
Scanner scanner = new Scanner(System.in);
// nextLine() - 讀取整行
System.out.print("請輸入句子:");
String line = scanner.nextLine(); // "Hello World"
// next() - 讀取一個單詞
System.out.print("請輸入單詞:");
String word = scanner.next(); // "Hello"(只讀到空白前)
讀取數字
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入年齡:");
int age = scanner.nextInt();
System.out.print("請輸入身高:");
double height = scanner.nextDouble();
System.out.println("年齡:" + age);
System.out.println("身高:" + height);
讀取多個值
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入兩個數字(空白分隔):");
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println("總和:" + (a + b));
nextLine() 的陷阱
在 nextInt() 等方法後使用 nextLine() 時要注意:
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入年齡:");
int age = scanner.nextInt();
System.out.print("請輸入名字:");
String name = scanner.nextLine(); // 問題:會讀到空字串!
System.out.println("名字:" + name); // 輸出空字串
這是因為 nextInt() 只讀取數字,換行符號 \n 還留在緩衝區,被 nextLine() 讀走了。
解決方法
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入年齡:");
int age = scanner.nextInt();
scanner.nextLine(); // 清除緩衝區的換行符號
System.out.print("請輸入名字:");
String name = scanner.nextLine(); // 現在可以正確讀取
System.out.println("名字:" + name);
驗證輸入
使用 hasNextXxx() 方法檢查輸入是否有效:
Scanner scanner = new Scanner(System.in);
System.out.print("請輸入一個整數:");
if (scanner.hasNextInt()) {
int num = scanner.nextInt();
System.out.println("你輸入了:" + num);
} else {
System.out.println("輸入無效,請輸入整數");
}
完整範例
import java.util.Scanner;
public class UserInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 讀取個人資料
System.out.print("請輸入姓名:");
String name = scanner.nextLine();
System.out.print("請輸入年齡:");
int age = scanner.nextInt();
System.out.print("請輸入身高(cm):");
double height = scanner.nextDouble();
scanner.nextLine(); // 清除緩衝區
System.out.print("請輸入興趣:");
String hobby = scanner.nextLine();
// 輸出結果
System.out.println("\n=== 個人資料 ===");
System.out.println("姓名:" + name);
System.out.println("年齡:" + age);
System.out.printf("身高:%.1f cm%n", height);
System.out.println("興趣:" + hobby);
scanner.close();
}
}
執行結果:
請輸入姓名:Alice
請輸入年齡:25
請輸入身高(cm):165.5
請輸入興趣:程式設計
=== 個人資料 ===
姓名:Alice
年齡:25
身高:165.5 cm
興趣:程式設計
從檔案讀取
Scanner 也可以從檔案讀取:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class ReadFile {
public static void main(String[] args) {
try {
Scanner scanner = new Scanner(new File("data.txt"));
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("找不到檔案");
}
}
}