Asking user to enter the input again after he gives a wrong value for the Input. InputMismatchException?

Anshuman Tripathy picture Anshuman Tripathy · Jul 28, 2014 · Viewed 12.1k times · Source

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

Answer

Eran picture Eran · Jul 28, 2014

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