上一篇
Java如何获取输入数字
- 后端开发
- 2025-06-11
- 4262
Java中获取输入的数字通常使用Scanner类,导入java.util.
Scanner后创建对象,调用nextInt()、nextDouble()等方法读取对应类型数值,也可用BufferedReader结合Integer.parseInt()转换实现。
使用 Scanner 类(推荐初学者)
Scanner 是 java.util 包中的工具类,提供简单的文本解析功能,适合基础输入操作。
完整示例代码
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象
System.out.print("请输入整数:");
int numberInt = scanner.nextInt(); // 直接读取整数
System.out.print("请输入小数:");
double numberDouble = scanner.nextDouble(); // 直接读取小数
System.out.println("整数:" + numberInt);
System.out.println("小数:" + numberDouble);
scanner.close(); // 关闭资源防止内存泄漏
}
}
关键注意事项
-
输入验证:
使用hasNextInt()或hasNextDouble()避免无效输入导致的崩溃:System.out.print("请输入整数:"); while (!scanner.hasNextInt()) { System.out.println("错误!请重新输入整数:"); scanner.next(); // 清除错误输入 } int safeNumber = scanner.nextInt(); -
资源释放:
务必调用scanner.close()释放系统资源(如从文件读取时)。
-
数据类型匹配:
nextInt()→ 整数nextDouble()→ 双精度小数nextFloat()→ 单精度小数
使用 BufferedReader + InputStreamReader(高性能场景)
适用于需要高效读取大量输入的场景(如文件/网络流),需手动转换数据类型。
完整示例代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReaderExample {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("请输入整数:");
int numberInt = Integer.parseInt(reader.readLine()); // 字符串转整数
System.out.print("请输入小数:");
double numberDouble = Double.parseDouble(reader.readLine()); // 字符串转小数
System.out.println("整数:" + numberInt);
System.out.println("小数:" + numberDouble);
} catch (IOException e) {
System.err.println("输入输出错误:" + e.getMessage());
} catch (NumberFormatException e) {
System.err.println("格式错误:必须输入数字!");
} finally {
try {
reader.close(); // 确保资源关闭
} catch (IOException e) {
System.err.println("关闭资源失败:" + e.getMessage());
}
}
}
}
关键优势与风险控制
-
异常处理:

IOException:处理输入流错误NumberFormatException:捕获非数字输入
-
性能优势:
BufferedReader的缓冲机制减少I/O操作次数,适合高频输入场景。 -
灵活转换:
通过Integer.parseInt()或Double.parseDouble()自由转换类型。
方法对比与选型建议
| 特性 | Scanner 类 |
BufferedReader 类 |
|---|---|---|
| 易用性 | ⭐⭐⭐⭐ (直接解析数字) | ⭐⭐ (需手动转换) |
| 性能 | ⭐⭐ (小型输入) | ⭐⭐⭐⭐ (缓冲优化) |
| 异常控制 | ⭐⭐ (需配合 hasNextXxx 验证) | ⭐⭐⭐ (明确捕获异常) |
| 适用场景 | 控制台交互、简单应用 | 文件/网络流、高频输入 |
最佳实践总结
- 优先选择
Scanner:
适合大多数控制台程序,简化数字解析流程。 - 严格验证输入:
使用hasNextInt()或try-catch避免非规输入崩溃。 - 资源必须关闭:
在finally块或 try-with-resources 中关闭流:
try (Scanner scanner = new Scanner(System.in)) { // Java 7+ 自动关闭 // 操作代码 } - 明确数据类型:
整数用int/long,小数用float/double,避免精度损失。
引用说明:本文代码示例基于 Oracle 官方 Java 17 文档,遵循 Java 标准库规范,异常处理逻辑参考《Effective Java》第 3 版条目 72(妥善处理异常)。
