要求用户在输入错误值后再次输入输入。 InputMismatchException时?

时间:2014-07-28 19:26:51

标签: java exception-handling try-catch inputmismatchexception

我创建了以下类来输入用户的年龄,然后在控制台中显示相应的信息。

在运行此程序时,控制台会询问"请输入您的年龄:"

如果用户输入例如:25的整数,则执行的类显示"你的年龄是:25岁和34岁;在控制台中。

如果用户输入非整数,控制台会显示: 年龄应该是整数 请输入您的年龄:

但是当我将光标放在&#34时,我无法通过键盘输入任何内容;请输入您的年龄:"。

我希望用户能够再次进入他的年龄,&如果他输入一个整数,它会显示正确的输出,但如果他输入一个非整数,控制台应再次询问他的年龄。

如果您查看我的代码,我可以设置变量' age'通过调用main函数中else块中的函数checkAge()。

有谁能告诉我哪里出错了?

public class ExceptionHandling{

    static Scanner userinput = new Scanner(System.in);

    public static void main(String[] args){ 
        int age = checkAge();

        if (age != 0){
            System.out.println("Your age is : " + age);         
        }else{
           System.out.println("Age should be an integer");
           age = checkAge();
        }
    }

    public static int checkAge(){
        try{            
            System.out.print("Please Enter Your Age :");
            return userinput.nextInt();
        }catch(InputMismatchException e){
            return 0;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

如果您希望多次执行代码(直到用户输入有效年龄),您应该将代码放在循环中:

public static void main(String[] args)
{
    int age = checkAge();
    while (age == 0) {
       System.out.println("Age should be an integer");
       userinput.nextLine();
       age = checkAge();
    }

    System.out.println("Your age is : " + age);
}

答案 1 :(得分:2)

<强>问题:

return userinput.nextInt();

当你输入一个字符串序列时,它不会消耗你的新行字符,当你再次进入你的方法并调用userinput.nextInt()时,它将消耗该新行并跳过它因此不会让你得到再次输入。

<强>溶液

在再次调用nextLine();方法之前添加checkAge以使用字符串中的new line

<强>样品:

    System.out.println("Age should be an integer");
    userinput.nextLine();
    age = checkAge();