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

使用try和catch块处理Java用户输入错误的相关问题咨询

输入校验代码调整方案

现有代码的问题

你当前编写的try-catch没有实际作用,因为Scanner.next()方法的返回值本身就是String类型,将String类型的值赋值给String变量不会抛出任何异常,所以校验逻辑永远不会触发。

实现思路

  • 程序名称属于字符串类型,无需做类型转换,只需校验输入非空即可
  • RAM内存大小、运行时长属于数值类型,需要将用户输入的字符串转换为对应数值类型,转换失败时捕获异常,提示用户重新输入,直到输入符合要求为止
  • 所有校验逻辑增加循环处理,避免单次输入错误后程序直接向下执行

调整后完整代码

import java.util.Scanner;

public class InputValidateDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 1. 校验输入程序名称
        String programName = "";
        while (programName.trim().isEmpty()) {
            System.out.println("请输入程序名称:");
            programName = scan.next().trim();
            if (programName.isEmpty()) {
                System.out.println("程序名称不能为空,请重新输入!");
            }
        }

        // 2. 校验输入RAM占用大小(示例为整数,单位可自定义,如MB)
        int ramSize = 0;
        while (ramSize <= 0) {
            System.out.println("请输入程序占用的RAM大小(正整数,单位MB):");
            String ramInput = scan.next().trim();
            try {
                ramSize = Integer.parseInt(ramInput);
                if (ramSize <= 0) {
                    System.out.println("RAM大小必须为正整数,请重新输入!");
                }
            } catch (NumberFormatException e) {
                System.out.println("输入格式错误,请输入合法的正整数!");
            }
        }

        // 3. 校验输入预计运行时长(示例为整数,单位可自定义,如分钟)
        int runDuration = 0;
        while (runDuration <= 0) {
            System.out.println("请输入程序预计运行时长(正整数,单位分钟):");
            String durationInput = scan.next().trim();
            try {
                runDuration = Integer.parseInt(durationInput);
                if (runDuration <= 0) {
                    System.out.println("运行时长必须为正整数,请重新输入!");
                }
            } catch (NumberFormatException e) {
                System.out.println("输入格式错误,请输入合法的正整数!");
            }
        }

        // 输入全部合法后可执行后续业务逻辑
        System.out.println("录入信息如下:");
        System.out.println("程序名称:" + programName);
        System.out.println("RAM占用大小:" + ramSize + "MB");
        System.out.println("预计运行时长:" + runDuration + "分钟");
        scan.close();
    }
}

核心逻辑说明

  • 每个输入项都用while循环包裹,只有输入符合要求才会跳出循环进入下一项输入
  • 数值类型的校验把类型转换逻辑放在try块中,一旦转换失败就会抛出NumberFormatException,被catch块捕获后提示用户输入正确格式
  • 额外增加了数值合法性校验,避免用户输入负数、0等不符合业务逻辑的数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:12:00