Bỏ qua để đến nội dung

Nhập dữ liệu từ bàn phím (Scanner)

Để đọc dữ liệu người dùng nhập từ bàn phím, Java cung cấp lớp Scanner trong gói java.util:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // đọc từ luồng nhập chuẩn (bàn phím)
System.out.print("Nhập tên của bạn: ");
String name = scanner.nextLine();
System.out.println("Xin chào, " + name + "!");
scanner.close();
}
}

2. Các phương thức đọc dữ liệu thường dùng

Phần tiêu đề “2. Các phương thức đọc dữ liệu thường dùng”
Phương thức Đọc kiểu Ví dụ
nextInt() int int age = scanner.nextInt();
nextLong() long long id = scanner.nextLong();
nextDouble() double double price = scanner.nextDouble();
next() String (một từ, đến khoảng trắng) String word = scanner.next();
nextLine() String (cả dòng) String line = scanner.nextLine();
nextBoolean() boolean boolean ok = scanner.nextBoolean();
Scanner scanner = new Scanner(System.in);
System.out.print("Nhập tuổi: ");
int age = scanner.nextInt();
System.out.print("Nhập điểm trung bình: ");
double gpa = scanner.nextDouble();
System.out.println("Tuổi: " + age + ", GPA: " + gpa);

3. ⚠️ Bẫy kinh điển: trộn nextInt()/nextDouble() với nextLine()

Phần tiêu đề “3. ⚠️ Bẫy kinh điển: trộn nextInt()/nextDouble() với nextLine()”

nextInt(), nextDouble(),… chỉ đọc giá trị, không đọc ký tự xuống dòng (\n) mà người dùng gõ Enter sau đó. Ký tự xuống dòng còn sót lại trong bộ đệm sẽ khiến nextLine() gọi ngay sau đó đọc phải chuỗi rỗng:

Scanner scanner = new Scanner(System.in);
System.out.print("Nhập tuổi: ");
int age = scanner.nextInt(); // người dùng gõ "25" rồi Enter -> \n còn sót lại trong bộ đệm
System.out.print("Nhập tên: ");
String name = scanner.nextLine(); // đọc luôn "\n" còn sót -> name là chuỗi RỖNG, không dừng chờ nhập!
System.out.println("Tuổi: " + age + ", Tên: '" + name + "'"); // Tên: '' - SAI!

Cách khắc phục: thêm một lời gọi scanner.nextLine() “ăn” ký tự xuống dòng còn sót trước khi đọc dòng tiếp theo:

int age = scanner.nextInt();
scanner.nextLine(); // "ăn" ký tự \n còn sót lại trong bộ đệm
String name = scanner.nextLine(); // giờ đọc đúng dòng người dùng nhập tiếp theo

Nên gọi scanner.close() khi không còn dùng đến nữa để giải phóng tài nguyên (đặc biệt quan trọng nếu Scanner đọc từ file thay vì System.in):

Scanner scanner = new Scanner(System.in);
// ... sử dụng scanner ...
scanner.close();
  • Scanner (gói java.util) dùng để đọc dữ liệu người dùng nhập từ bàn phím qua System.in
  • nextInt(), nextDouble(), next() đọc theo token, nextLine() đọc cả dòng
  • ⚠️ Trộn nextInt()/nextDouble() với nextLine() dễ gây lỗi do ký tự xuống dòng còn sót lại - thêm một scanner.nextLine() thừa để “dọn” bộ đệm