You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:53:31