Scanner类输入两个数字,先导入该类,创建对象后用
nextInt()或
nextDouble()方法依次读取用户
输入的两个数值
Java中输入两个数字可以通过多种方式实现,以下是详细的方法和示例代码:
使用 Scanner 类的 nextInt() 方法(推荐)
这是最常用且简洁的方式,适用于整型数据的输入,具体步骤如下:
- 导入
Scanner类:需要先引入java.util.Scanner包。 - 创建
Scanner对象:通过new Scanner(System.in)实例化一个扫描器对象,用于读取标准输入流(键盘输入)。 - 提示用户并读取第一个数字:调用
scanner.nextInt()等待用户输入第一个整数。 - 同理读取第二个数字:再次调用
scanner.nextInt()获取第二个整数。 - 关闭资源:使用完毕后调用
scanner.close()释放资源。
示例代码如下:
import java.util.Scanner;
public class TwoNumbersExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象
System.out.print("请输入第一个数字:");
int num1 = scanner.nextInt(); // 读取第一个整数
System.out.print("请输入第二个数字:");
int num2 = scanner.nextInt(); // 读取第二个整数
// 输出结果验证
System.out.println("您输入的两个数字分别是:" + num1 + " 和 " + num2);
scanner.close(); // 关闭Scanner以释放资源
}
}
此方法简单直接,但需注意若用户误输非整数(如字母或符号),会抛出 InputMismatchException,可通过 try-catch 块进行异常处理以提高健壮性。
try {
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("错误:请确保输入的是整数!");
}
逐行读取字符串后转换为整数
如果希望更灵活地控制输入流程(例如分步提示),可以先用 nextLine() 获取整行内容,再解析为数字,这种方式能有效避免换行符残留问题,以下是实现逻辑:
- 读取整行文本:使用
scanner.nextLine()捕获用户输入的完整行。 - 转换为整数类型:通过
Integer.parseInt()将字符串转为int类型。 - 组合多次调用完成两次输入:重复上述过程两次以获取两个数字。
完整示例如下:
import java.util.Scanner;
public class LineByLineInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数字:");
String input1 = scanner.nextLine(); // 读取第一行的原始输入
int num1 = Integer.parseInt(input1); // 转换为整数
System.out.print("请输入第二个数字:");
String input2 = scanner.nextLine(); // 读取第二行的原始输入
int num2 = Integer.parseInt(input2); // 转换为整数
System.out.println("解析成功!两个数字为:" + num1 + " 和 " + num2);
scanner.close();
}
}
这种方法的优势在于能明确区分每次回车操作,适合需要精确控制交互场景的情况,但需额外处理可能的 NumberFormatException(当用户输入非数字时):
try {
int num1 = Integer.parseInt(scanner.nextLine());
int num2 = Integer.parseInt(scanner.nextLine());
} catch (NumberFormatException e) {
System.out.println("无效的数字格式,请重新运行程序并输入合法数值!");
}
基于循环结构的多次数据采集
对于复杂应用场景(如不确定何时停止输入),可以用循环结构配合计数器实现动态管理,核心思路是设置一个变量记录已成功读取的次数,直到达到目标数量为止,以下是一个典型实现:
import java.util.Scanner;
public class LoopControlledInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] numbers = new int[2]; // 存储两个数字的数组
int count = 0; // 计数器初始化
while (count < 2) { // 仅当未满两个有效输入时继续循环
System.out.printf("正在等待第%d个数字...n", count + 1);
try {
numbers[count] = Integer.parseInt(scanner.nextLine()); // 尝试解析当前行的输入
count++; // 成功则增加计数器
} catch (NumberFormatException e) {
System.out.println("️ 检测到非规字符,此次输入无效!"); // 友好的错误反馈
}
}
System.out.println("最终收集到的两个有效数字是:" + numbers[0] + " 与 " + numbers[1]);
scanner.close();
}
}
该方案的特点是容错性强,允许用户在出错后重新尝试输入,直到满足条件为止,特别适合教学场景或对用户体验要求较高的应用。
不同数据类型的扩展支持
除了基本的 int 类型外,还可以根据需求调整数据类型:
| 目标类型 | 对应方法 | 示例代码片段 |
|—————-|————————|———————————-|
| 双精度浮点数 | scanner.nextDouble() | double d = scanner.nextDouble(); |
| 长整型 | scanner.nextLong() | long l = scanner.nextLong(); |
| 单个字符 | scanner.next().charAt(0) | char c = scanner.next().charAt(0); |
若需处理带小数点的运算,可将声明改为 double num1 = scanner.nextDouble();,无需修改其他逻辑即可支持浮点运算。
相关问答FAQs
Q1: 如果用户不小心输入了非数字内容怎么办?
A: 可以使用 try-catch 捕获 InputMismatchException(针对 nextInt())或 NumberFormatException(针对 parseInt()),并在捕获块内提示用户重新输入。
while (true) {
try {
int num = scanner.nextInt();
break; // 成功跳出循环
} catch (InputMismatchException e) {
System.out.println("请不要输入非数字字符!");
scanner.nextLine(); // 清除错误的缓冲区内容
}
}
Q2: 如何确保程序不会因为未关闭 Scanner 而导致内存泄漏?
A: 始终记得在不再需要 Scanner 对象时调用其 close() 方法,尤其在图形界面程序中,未关闭的输入流可能占用系统资源,最佳实践是将关闭操作放在 finally 代码块中以保证执行:
Scanner scanner = null;
try {
scanner = new Scanner(System.in);
// ...业务逻辑...
} finally {
if (scanner != null) {
scanner.close();
}
}
