3

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

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

如果用户输入一个整数,例如: 25 ,则执行的类会在控制台中显示“您的年龄是:25”。

如果用户输入非整数,控制台会显示:Age should be an Integer Please Enter your Age:

但是当我将光标放在“请输入您的年龄:”旁边时,我无法通过键盘输入任何内容。

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

如果您查看我的代码,我将通过在我的主函数的 else 块中调用函数 checkAge() 来设置变量“age”的值。

谁能告诉我哪里出错了?

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;
        }
    }
}
4

2 回答 2

3

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

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);
}
于 2014-07-28T19:29:52.573 回答
2

问题:

return userinput.nextInt();

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

解决方案:

在再次调用该方法nextLine();之前添加以使用来自字符串的checkAgenew line

样本:

    System.out.println("Age should be an integer");
    userinput.nextLine();
    age = checkAge();
于 2014-07-28T19:34:15.217 回答