
本文介绍如何使用 Scanner 正确检测用户输入是否为有效整数,避免 InputMismatchException,并通过循环重试机制确保后续逻辑仅在输入合法时执行。
本文介绍如何使用 scanner 正确检测用户输入是否为有效整数,避免 `inputmismatchexception`,并通过循环重试机制确保后续逻辑仅在输入合法时执行。
在 Java 中,直接调用 Scanner.nextInt() 无法提前判断输入是否为整数——一旦用户输入非数字(如 "abc" 或 "3.14"),该方法会抛出 InputMismatchException,导致程序中断。更健壮的做法是:先以字符串形式读取输入,再尝试解析为整数。这种方式将类型校验与业务逻辑解耦,提升程序鲁棒性与用户体验。
以下是推荐的实现方案:
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
System.out.println("Enter the Number you want the Maximum times the Pattern to Print while Increasing 1 each Time:");
Scanner scanner = new Scanner(System.in);
int number = 0;
boolean isValid = false;
// 循环直到获得有效整数输入
while (!isValid) {
String input = scanner.next(); // 安全读取为字符串
try {
number = Integer.parseInt(input);
isValid = true; // 解析成功,退出循环
} catch (NumberFormatException e) {
System.out.println("Please Enter a valid Integer Value: \"" + input + "\"");
System.out.print("Try again: ");
}
}
// ✅ 此处确保 number 是合法整数,可安全执行核心逻辑
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
scanner.close(); // 善后:关闭 Scanner 防止资源泄漏
}
}? 关键要点说明:
- ❌ 避免在循环内重复创建
Scanner实例(如原代码中new Scanner(System.in)),否则可能引发资源竞争或输入流异常; - ✅ 使用
scanner.next()(非nextLine())可跳过空白符,适合单值输入;若需支持带空格的输入,请改用nextLine()并注意前序换行符残留问题; - ✅ 显式捕获
NumberFormatException而非通用Exception,符合异常处理最佳实践; - ✅ 输出示例图案时,使用
System.out.print("*")实现横向拼接,System.out.println()换行,最终呈现标准三角形(如输入4→*,**,***,****); - ✅ 最后调用
scanner.close()释放资源,尤其在长期运行程序中不可忽略。
该模式不仅适用于整数校验,还可轻松扩展至浮点数(Double.parseDouble)、日期等其他类型验证,是命令行交互程序中输入校验的标准范式。
立即学习“Java免费学习笔记(深入)”;


















