Java中如何检查输入是否为整数并仅在符合条件时执行后续代码
解决Java输入整数校验与递增星号图案打印问题
原代码存在的核心问题
- 错误调用
a.hasNextInt():a是int类型变量,没有hasNextInt()方法,该方法属于Scanner对象 - 提前调用
nextInt():输入非整数时会直接抛出InputMismatchException,无法进入后续判断逻辑 - 重复创建
Scanner对象:每次循环新建Scanner会导致输入流混乱,应该复用同一个实例 - 打印内容错误:内层循环输出字符串"a"而非星号
*,且用println会导致每个星号单独换行,不符合预期 - 循环控制逻辑错误:
isInteger变量的状态设置与循环条件不匹配,无法实现重复输入的需求
修正方案1:使用异常捕获处理输入校验
import java.util.Scanner; import java.util.InputMismatchException; 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); boolean validInput = false; int maxRows = 0; // 循环直到获取有效的整数输入 while (!validInput) { try { maxRows = scanner.nextInt(); validInput = true; // 输入有效,退出循环 } catch (InputMismatchException e) { System.out.println("Please Enter a Integer Value : "); scanner.next(); // 清除输入缓冲区的无效内容,避免死循环 } } // 打印递增星号图案 for (int i = 1; i <= maxRows; i++) { for (int j = 1; j <= i; j++) { System.out.print("*"); // 不换行连续打印星号 } System.out.println(); // 每行结束后换行 } scanner.close(); // 关闭Scanner资源 } }
修正方案2:使用hasNextInt()做前置判断(无需捕获异常)
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 maxRows = 0; // 循环直到输入有效整数 while (!scanner.hasNextInt()) { System.out.println("Please Enter a Integer Value : "); scanner.next(); // 清除缓冲区中的无效输入 } maxRows = scanner.nextInt(); // 打印星号图案 for (int i = 1; i <= maxRows; i++) { for (int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); } scanner.close(); } }
关键逻辑说明
- 输入校验:两种方案都确保了只有输入整数时才会执行打印逻辑,非整数输入会触发提示并要求重新输入
- 图案打印:内层循环用
print("*")连续输出星号,外层循环用println()换行,完全匹配预期的递增星号格式 - 资源管理:复用同一个
Scanner实例,避免输入流混乱,最后主动关闭资源
内容的提问来源于stack exchange,提问作者Rachit Srivastava
相关产品推荐
相关产品推荐

