使用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
相关产品推荐
相关产品推荐

