
本文介绍如何使用 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 <p>? <strong>关键要点说明:</strong> </p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2870" title="Gradle 9.8.0"><img
src="https://img.php.cn/upload/manual/001/431/639/6ad9ce71d8cb6379.png" alt="Gradle 9.8.0" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2870" title="Gradle 9.8.0" class="overflowclass">Gradle 9.8.0</a>
<p class="overflowclass"></p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2870" title="Gradle 9.8.0" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- ❌ 避免在循环内重复创建
Scanner实例(如原代码中new Scanner(System.in)),否则可能引发资源竞争或输入流异常; - ✅ 使用
scanner.next()(非nextLine())可跳过空白符,适合单值输入;若需支持带空格的输入,请改用nextLine()并注意前序换行符残留问题; - ✅ 显式捕获
NumberFormatException而非通用Exception,符合异常处理最佳实践; - ✅ 输出示例图案时,使用
System.out.print("*")实现横向拼接,System.out.println()换行,最终呈现标准三角形(如输入4→*,**,***,****); - ✅ 最后调用
scanner.close()释放资源,尤其在长期运行程序中不可忽略。
该模式不仅适用于整数校验,还可轻松扩展至浮点数(Double.parseDouble)、日期等其他类型验证,是命令行交互程序中输入校验的标准范式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










