Asking user to enter the input again after he give

2019-07-05 16:55发布

问题:

I have created the following class for Inputting a user's age and then displaying appropriate info in the console.

On running this program , the console asks "Please Enter your Age : "

If the user enters an Integer for eg: 25 , the executed class displays " Your age is : 25" in the console.

If the user enters a non-integer number , the console displays: Age should be an Integer Please Enter your Age:

But I am not able to enter anything through the keyboard when I place my cursor next to "Please Enter your Age: ".

I want the user to be able to enter his age again, & if he enters an integer it displays the proper output but if he enters a non-integer the console should ask him again for the age.

If you look at my code I'm setting the value of the variable 'age' by calling the function checkAge() inside the else block in my main function.

Can anybody tell me where I am going wrong?

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

回答1:

problem:

return userinput.nextInt();

By the time you input a sequence of string it will not consume your new line character, and when you go again inside your method and call userinput.nextInt() it will consume that new line and skip it thus not letting you get input again.

solution:

add nextLine(); before you call the checkAge method again to consume the new line from the string

sample:

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


回答2:

You should put your code in a loop if you wish it to execute multiple times (until the user inputs a valid age) :

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