在Java编程中,Scanner就像程序的"耳朵",让程序能够听到用户的声音,实现真正的交互式程序。今天,我们学习这个让Java程序"活"起来的关键工具。
一、Scanner基础:创建与使用
1.1 导入和创建Scanner
java
import java.util.Scanner; // 第一步:导入
public class ScannerBasic {
public static void main(String[] args) {
// 第二步:创建Scanner对象
Scanner scanner = new Scanner(System.in);
// 第三步:使用Scanner
System.out.print("请输入你的名字:");
String name = scanner.nextLine();
System.out.println("你好," + name + "!");
// 第四步:关闭Scanner(重要!)
scanner.close();
}
}
1.2 读取不同类型的数据
java
import java.util.Scanner;
public class ReadDifferentTypes {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取整数
System.out.print("请输入年龄:");
int age = scanner.nextInt();
// 读取小数
System.out.print("请输入身高(米):");
double height = scanner.nextDouble();
// 读取字符串
scanner.nextLine(); // 重要:先清空缓冲区
System.out.print("请输入城市:");
String city = scanner.nextLine();
System.out.println("年龄:" + age);
System.out.println("身高:" + height);
System.out.println("城市:" + city);
scanner.close();
}
}
二、最重要的两个方法:next() vs nextLine()
2.1 关键区别示例
java
import java.util.Scanner;
public class NextVsNextLine {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// ❌ 错误示例
System.out.print("请输入年龄:");
int age = scanner.nextInt();
System.out.print("请输入姓名:");
String name = scanner.nextLine(); // 这里会出问题!
System.out.println("你好," + name);
// ✅ 正确做法
System.out.print("\n请重新输入年龄:");
int age2 = scanner.nextInt();
scanner.nextLine(); // 关键:清空缓冲区
System.out.print("请重新输入姓名:");
String name2 = scanner.nextLine();
System.out.println("这次对了,你好," + name2);
scanner.close();
}
}
2.2 记忆技巧
- next() :读取一个"单词"(遇到空格就停止)
- nextLine() :读取整行(包括空格)
- 重要 :使用nextInt()、nextDouble()等后,要用
scanner.nextLine()清空缓冲区
三、实战应用:学生成绩计算器
java
import java.util.Scanner;
public class StudentGradeCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== 学生成绩计算器 ===\n");
// 输入学生信息
System.out.print("请输入学生姓名:");
String name = scanner.nextLine();
System.out.print("请输入语文成绩:");
int chinese = scanner.nextInt();
System.out.print("请输入数学成绩:");
int math = scanner.nextInt();
System.out.print("请输入英语成绩:");
int english = scanner.nextInt();
scanner.nextLine(); // 清空缓冲区
// 计算
int total = chinese + math + english;
double average = total / 3.0;
// 输出结果
System.out.println("\n=== 成绩报告 ===");
System.out.println("姓名:" + name);
System.out.println("总分:" + total);
System.out.printf("平均分:%.2f\n", average);
// 判断等级
if (average >= 90) {
System.out.println("等级:优秀");
} else if (average >= 80) {
System.out.println("等级:良好");
} else if (average >= 60) {
System.out.println("等级:及格");
} else {
System.out.println("等级:不及格");
}
scanner.close();
}
}
四、错误处理和输入验证
java
import java.util.Scanner;
public class InputValidation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 验证年龄输入(必须是1-100之间的整数)
int age = 0;
boolean valid = false;
while (!valid) {
System.out.print("请输入年龄(1-100):");
if (scanner.hasNextInt()) {
age = scanner.nextInt();
if (age >= 1 && age <= 100) {
valid = true;
} else {
System.out.println("错误:年龄必须在1-100之间!");
}
} else {
System.out.println("错误:请输入整数!");
scanner.next(); // 清除错误的输入
}
}
scanner.nextLine(); // 清空缓冲区
System.out.println("年龄验证通过:" + age);
scanner.close();
}
}
五、最重要知识点总结
1. 核心三步骤
java
// 1. 导入
import java.util.Scanner;
// 2. 创建
Scanner scanner = new Scanner(System.in);
// 3. 使用
String input = scanner.nextLine();
// 4. 关闭(不要忘!)
scanner.close();
2. 黄金法则
- 混合使用nextXXX()和nextLine()时 :先用
scanner.nextLine()清空缓冲区 - 输入验证 :用
hasNextInt()、hasNextDouble()检查输入类型 - 关闭Scanner:用完一定要关闭,释放资源
3. 一句话记住
Scanner是Java程序的"麦克风"------nextXXX()接收用户输入,nextLine()清空缓冲区,记得用完要关闭!