I need to check if a user input value is not an int value. I've tried different combinations of what I know but I either get nothing or random errors
For example:
If the user inputs "adfadf 1324" it'll raise a warning message.
What I have:
// Initialize a Scanner to read input from the command line
Scanner sc = new Scanner(System.in);
int integer, smallest = 0, input;
boolean error = false;
System.out.print("Enter an integer between 1-100: ");
range = sc.nextInt();
if(!sc.hasNextInt()) {
error = true;
System.out.println("Invalid input!");
System.out.print("How many integers shall we compare? (Enter an integer between 1-100: ");
sc.next();
}
while(error) {
for(int ii = 1; ii <= integer; ii++) {
...
} // end for loop
}
System.out.println("The smallest number entered was: " + smallest);
}
}
This question is related to
java
validation
int function(){
Scanner input = new Scanner(System.in);
System.out.print("Enter an integer between 1-100: ");
int range;
while(true){
if(input.hasNextInt()){
range = input.nextInt();
if(0<=range && range <= 100)
break;
else
continue;
}
input.nextLine(); //Comsume the garbage value
System.out.println("Enter an integer between 1-100:");
}
return range;
}
Try this one:
for (;;) {
if (!sc.hasNextInt()) {
System.out.println(" enter only integers!: ");
sc.next(); // discard
continue;
}
choose = sc.nextInt();
if (choose >= 0) {
System.out.print("no problem with input");
} else {
System.out.print("invalid inputs");
}
break;
}
you have following errors which in turn is causing you that exception, let me explain it
this is your existing code:
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
System.out.print("Enter an integer: ");
usrInput= sc.nextInt();
}
in the above code if(!scan.hasNextInt())
will become true
only when user input contains both characters as well as integers like your input adfd 123
.
but you are trying to read only integers inside the if condition using usrInput= sc.nextInt();
. Which is incorrect,that's what is throwing Exception in thread "main" java.util.InputMismatchException
.
so correct code should be
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
System.out.print("Enter an integer: ");
sc.next();
continue;
}
in the above code sc.next()
will help to read new input from user and continue
will help in executing same if condition(i.e if(!scan.hasNextInt())
) again.
Please use code in my first answer to build your complete logic.let me know if you need any explanation on it.
try this code [updated]:
Scanner scan = null;
int range, smallest = 0, input;
for(;;){
boolean error=false;
scan = new Scanner(System.in);
System.out.print("Enter an integer between 1-100: ");
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
continue;
}
range = scan.nextInt();
if(range < 1) {
System.out.println("Invalid input!");
error=true;
}
if(error)
{
//do nothing
}
else
{
break;
}
}
for(int ii = 1; ii <= range; ii++) {
scan = new Scanner(System.in);
System.out.print("Enter value " + ii + ": ");
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
ii--;
continue;
}
}
Taken from a related post:
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false;
}
// only got here if we didn't return false
return true;
}
This is to keep requesting inputs while this input is integer and find whether it is odd or even else it will end.
int counter = 1;
System.out.println("Enter a number:");
Scanner OddInput = new Scanner(System.in);
while(OddInput.hasNextInt()){
int Num = OddInput.nextInt();
if (Num %2==0){
System.out.println("Number " + Num + " is Even");
System.out.println("Enter a number:");
}
else {
System.out.println("Number " + Num + " is Odd");
System.out.println("Enter a number:");
}
}
System.out.println("Program Ended");
}
Source: Stackoverflow.com