Reputation: 3964
I want the user to enter a number which is scanned by the following code:
scanner.nextInt();
If a user enters a string instead, the program throws InputMismatchException
, which is obvious. I want to catch the exception in such a way that the program prompts the user to enter an input until the user enters an integer value.
Scanner scanner = new Scanner(System.in);
while(true) {
try {
System.out.println("Please enter a number: ");
int input = scanner.nextInt();
System.out.println(input);
//statements
break;
}
catch(InputMismatchException | NumberFormatException ex ) {
continue;
}
}
This code creates an infinite loop if a string is entered.
Upvotes: 6
Views: 11386
Reputation: 3964
The answer to my problem is as follows:
Scanner scanner = new Scanner(System.in);
while(true) {
try {
System.out.println("Please enter a number: ");
int input = scanner.nextInt();
System.out.println(input);
//statements
break;
}
catch(InputMismatchException | NumberFormatException ex ) {
scanner.next();//new piece of code which parses the wrong input and clears the //scanner for new input
continue;
}
}
Upvotes: 4
Reputation: 48817
Put Scanner scanner = new Scanner(System.in);
within your while
loop.
Scanner scanner;
while(true) {
try {
System.out.println("Please enter a number: ");
scanner = new Scanner(System.in);
int input = scanner.nextInt();
System.out.println(input);
//statements
break;
}
catch(InputMismatchException | NumberFormatException ex ) {
System.out.println("I said a number...");
}
}
Upvotes: 3
Reputation: 31637
How about this?
while(true) {
try {
System.out.println("Please enter a number: ");
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
System.out.println("\n\nEntered number is : " + input);
break;
} catch(InputMismatchException | NumberFormatException ex ) {
System.out.println("\n\nInput was not a number. Please enter number again : ");
} catch(Exception e ) {
System.out.println("\n\nException caught :: " + e);
}
}
I have also removed continue
syntax as those are not needed.
Upvotes: 0