Nhập dữ liệu từ bàn phím (Scanner)
1. Tạo đối tượng Scanner
Phần tiêu đề “1. Tạo đối tượng 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 theo4. Đóng Scanner
Phần tiêu đề “4. Đóng Scanner”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();Tổng kết
Phần tiêu đề “Tổng kết”Scanner(góijava.util) dùng để đọc dữ liệu người dùng nhập từ bàn phím quaSystem.innextInt(),nextDouble(),next()đọc theo token,nextLine()đọc cả dòng- ⚠️ Trộn
nextInt()/nextDouble()vớinextLine()dễ gây lỗi do ký tự xuống dòng còn sót lại - thêm mộtscanner.nextLine()thừa để “dọn” bộ đệm