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

Java数值异常处理:如何实现非数字输入时重新提示用户输入?

解决Java输入整数的验证问题

要实现输入非数字时重新要求用户输入的功能,你可以通过Scanner的hasNextInt()方法判断输入是否为整数,结合循环重复获取有效输入。下面是修改后的完整代码:

import java.util.Scanner;

public class SmallestNumber {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 获取三个有效整数
        int n1 = getValidIntInput(sc, "Enter first number: ");
        int n2 = getValidIntInput(sc, "Enter second number: ");
        int n3 = getValidIntInput(sc, "Enter third number: ");
        
        sc.close();
        
        // 计算最小值
        int smallest;
        if(n1 < n2) {
            smallest = n3 < n1 ? n3 : n1;
        } else {
            smallest = n2 < n3 ? n2 : n3;
        }
        
        System.out.println("The smallest number is: " + smallest);
    }
    
    // 封装获取有效整数的方法,复用逻辑
    private static int getValidIntInput(Scanner scanner, String prompt) {
        System.out.print(prompt);
        while (!scanner.hasNextInt()) {
            // 吃掉无效的输入内容,避免死循环
            scanner.next();
            System.out.print("Invalid input! Please enter an integer: ");
        }
        // 获取有效整数并清除换行符
        int number = scanner.nextInt();
        scanner.nextLine();
        return number;
    }
}

关键逻辑说明:

  • hasNextInt()判断:该方法检查输入流的下一个元素是否为整数,返回布尔值,不会抛出异常。
  • 循环处理无效输入:若输入不是整数,用scanner.next()读取并丢弃无效内容(否则无效输入会滞留在流中导致死循环),再提示用户重新输入。
  • 封装方法复用:把输入验证逻辑封装成独立方法,避免重复编写相同代码,让主逻辑更简洁。
  • scanner.nextLine()处理换行:nextInt()只会读取整数部分,剩余的换行符需要用nextLine()清除,避免影响后续输入。

替代方案(异常捕获方式):

如果更习惯用异常处理实现,也可以用以下逻辑:

import java.util.InputMismatchException;
import java.util.Scanner;

// 省略主方法部分,仅替换getValidIntInput方法
private static int getValidIntInput(Scanner scanner, String prompt) {
    int number = 0;
    boolean isValid = false;
    while (!isValid) {
        System.out.print(prompt);
        try {
            number = scanner.nextInt();
            isValid = true;
        } catch (InputMismatchException e) {
            scanner.next(); // 清除无效输入
            System.out.println("Invalid input! Please enter an integer.");
        }
    }
    scanner.nextLine();
    return number;
}

这种方式通过捕获InputMismatchException处理非整数输入,逻辑和前一种方法一致,按需选择即可。

内容的提问来源于stack exchange,提问作者Aggelos Gk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:30:56