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

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; >> > 
5,654 6 6 gold badges 42 42 silver badges 62 62 bronze badges asked Jul 28, 2014 at 19:26 Anshuman Tripathy Anshuman Tripathy 113 1 1 gold badge 3 3 silver badges 13 13 bronze badges

2 Answers 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); > 
answered Jul 28, 2014 at 19:29 393k 56 56 gold badges 716 716 silver badges 783 783 bronze badges

Nope. I already tried that. If I put it in a loop, the console goes wild. It keeps asking for age until I stop the console. Also if I put in your code it takes the value of age as 0, no matter what I have inputted initially. i.e. if I input 5.89. this line keeps getting repeated in the console: Please Enter Your Age :Your Age is : 0

Commented Jul 28, 2014 at 19:37

@AnshumanTripathy Rod is right about adding userinput.nextLine(); , but you still need to use a loop. Updated answer.

Commented Jul 28, 2014 at 19:44

ya I messed around with the code and this one works: public static void main(String[] args) < int age = checkAge(); while (age == 0)< System.out.print("Age should be an Integer"); userinput.nextLine(); age = checkAge(); >System.out.println("Your Age is : "+ age); Thanks for your help :)