上一篇
Java如何读取用户输入的数字?
- 后端开发
- 2025-06-22
- 4952
在Java中输入数字通常使用Scanner类,首先导入java.util.Scanner,创建Scanner对象关联System.in,然后调用nextInt()、nextDouble()等方法读取对应类型数值,最后关闭Scanner避免资源泄露。
使用 Scanner 类(推荐初学者)
Scanner 是 java.util 包中的工具类,适合简单输入操作。
示例代码:读取整数和浮点数
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("输入整数: ");
int numInt = scanner.nextInt(); // 读取整数
System.out.print("输入浮点数: ");
double numDouble = scanner.nextDouble(); // 读取浮点数
System.out.println("整数: " + numInt);
System.out.println("浮点数: " + numDouble);
} catch (InputMismatchException e) {
System.err.println("错误:输入类型不匹配!");
} finally {
scanner.close(); // 关闭资源
}
}
}
关键点:

nextInt()、nextDouble()分别读取整数和浮点数。- 异常处理:输入非数字时抛出
InputMismatchException。 - 资源释放:使用
finally块关闭Scanner。
使用 BufferedReader(高性能场景)
BufferedReader 位于 java.io 包,适合大量数据输入,需手动转换类型。
示例代码:读取整数

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("输入整数: ");
String input = reader.readLine(); // 读取字符串
int num = Integer.parseInt(input); // 转为整数
System.out.println("整数: " + num);
} catch (IOException e) {
System.err.println("IO错误: " + e.getMessage());
} catch (NumberFormatException e) {
System.err.println("错误:输入的不是有效整数!");
} finally {
try {
reader.close(); // 关闭资源
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
关键点:
readLine()读取整行文本。- 类型转换:
Integer.parseInt()或Double.parseDouble()将字符串转为数字。 - 异常处理:
IOException:输入流错误。NumberFormatException:转换失败(如输入字母)。
输入验证与循环重试
确保用户输入有效数字,避免程序崩溃。

示例:循环直到输入正确
Scanner scanner = new Scanner(System.in);
int num = 0;
boolean valid = false;
while (!valid) {
System.out.print("请输入整数: ");
try {
num = scanner.nextInt();
valid = true; // 输入正确时退出循环
} catch (InputMismatchException e) {
System.err.println("错误!请重新输入。");
scanner.nextLine(); // 清除错误输入
}
}
System.out.println("输入成功: " + num);
scanner.close();
Scanner vs BufferedReader 对比
| 特性 | Scanner | BufferedReader |
|---|---|---|
| 易用性 | ⭐⭐⭐⭐(方法直接) | ⭐⭐(需手动转换) |
| 性能 | ⭐⭐(较慢) | ⭐⭐⭐⭐(高效缓冲) |
| 异常处理 | 仅需处理 InputMismatchException |
需处理 IOException 和 NumberFormatException |
| 适用场景 | 简单输入、学习阶段 | 文件读取、大数据流处理 |
注意事项
- 资源泄漏:务必关闭
Scanner或BufferedReader(用try-with-resources更安全)。 - 输入缓存:混合使用
nextLine()和nextInt()时,用scanner.nextLine()清除换行符。 - 数值范围:大整数用
nextLong(),避免溢出。 - 国际化:浮点数输入需注意小数点格式(如
5英文 vs1,5欧洲)。
最佳实践总结
- 初学者:用
Scanner,简洁易上手。 - 生产环境:优先选
BufferedReader(尤其文件/网络输入)。 - 健壮性:始终添加异常处理和输入验证循环。
引用说明:本文代码基于 Oracle 官方 Java 17 文档,遵循 Java 编码规范,异常处理逻辑参考《Effective Java》第3版(Joshua Bloch)。
