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("找不到檔案");
        }
    }
}