Java帮助异常处理 publicstaticvoidmain(字符串[]args){ int年龄=0; 而(年龄==0){ System.out.println(“你多大了”); 年龄=校验有效期(); } } 公共静态int-checkValidAge(){ 试一试{ 返回userInput.nextInt(); } 捕获(输入不匹配异常e){ userInput.next(); System.out.println(“输入整数”); 返回0; } } }

Java帮助异常处理 publicstaticvoidmain(字符串[]args){ int年龄=0; 而(年龄==0){ System.out.println(“你多大了”); 年龄=校验有效期(); } } 公共静态int-checkValidAge(){ 试一试{ 返回userInput.nextInt(); } 捕获(输入不匹配异常e){ userInput.next(); System.out.println(“输入整数”); 返回0; } } },java,Java,最近开始学习java(完全是初学者)。 所以我有点困惑,当我输入数字时,这会导致循环中断,而当我输入字符时,循环不会中断,所以这并不意味着相反。 只是想创建一些捕获错误并允许您重试的内容。正如您的代码所写: while(年龄=0) 当您的输入是 整数(不等于0),比如说3: 函数checkValidAge()返回3并将3分配给age, 由于局部变量age=3,它当然会中断while循环,因为a==0是false 字符 您输入一个字符,函数checkValidAge()将引发inputmasch

最近开始学习java(完全是初学者)。
所以我有点困惑,当我输入数字时,这会导致循环中断,而当我输入字符时,循环不会中断,所以这并不意味着相反。
只是想创建一些捕获错误并允许您重试的内容。

正如您的代码所写:
while(年龄=0)

当您的输入是

  • 整数(不等于0),比如说3:
    函数
    checkValidAge()
    返回3并将3分配给
    age

    由于局部变量
    age=3
    ,它当然会中断while循环,因为
    a==0
    false
  • 字符
    您输入一个字符,函数
    checkValidAge()
    将引发
    inputmaschException
    ,并且
    checkValidAge()
    返回值为
    0

    然后将返回值
    0
    分配给局部变量
    age
    ,这意味着
    age=0
    。 此时,
    age==0
    返回true,并满足while循环继续的要求

  • 不,这是正确的方法。提示循环的整个思想是获取一个有效的整数值。如果提供的数据无效,则会通知用户并从验证方法返回0,以便提示循环继续并向用户提供相同的提示,以便重试

    由于验证是在用户输入上进行的,因此,对于这个特定的年龄提示,您可能应该一直使用它。可以提供许多应视为无效的整数,例如:

    • 任何有符号值(例如:-63)
    • 任何低于合理最低年龄的无符号值:(ex:18)。多少岁 要使用您的应用程序,用户是否需要被访问。a会是1吗 岁使用你的应用程序
    • 超过合理最长期限的任何无符号值:(ex:125)。这个星球上有史以来最长寿的人活到了122岁
    您可能希望向checkValidAge()方法添加一个包含值范围:

    public static int checkValidAge(int min, int max) {
        int ageValue = 0;
        try {
            ageValue = userInput.nextInt();
            if (ageValue < min || ageValue > max) {
                throw new InputMismatchException();
            }
        }
        catch(InputMismatchException e) {
            System.out.println("Invalid age supplied! (" + ageValue + ")");
            ageValue = 0;
        }
        
        userInput.nextLine();       // consume ENTER
        return ageValue;
    }
    
    公共静态整数校验有效性(整数最小值,整数最大值){
    int ageValue=0;
    试一试{
    ageValue=userInput.nextInt();
    如果(年龄值<最小值| |年龄值>最大值){
    抛出新输入失配异常();
    }
    }
    捕获(输入不匹配异常e){
    System.out.println(“提供的年龄无效!(“+ageValue+”));
    年龄值=0;
    }
    userInput.nextLine();//输入
    返回值;
    }
    
    您在哪里定义了userInput?如果您输入数字0,它不会导致循环中断,对吗?对不起,我的坏消息,我还以为是另一种情况。谢谢您执行了额外的步骤并展示了我可以做的事情。