Yiuri
Yiuri

Reputation: 31

InputMismatchException for String input into integer field

I am having trouble with entering non-integers into an integer field. I am only taking precautions so that if another person uses/works on my program they don't get this InputMismatchException.

When I enter a non-digit character into the input variable, I get the above error. Is there any way to compensate for this like one could do for a NullPointerException when it comes to strings?

This code is redacted just to include the relevant portions causing the problem.

import java.util.Scanner;

class MyWorld {

public static void main(String[] args) {

   Scanner user_input = new Scanner(System.in);

   int input = 0;   

   System.out.println("What is your age? : ");
   input = user_input.nextInt();
   System.out.println("You are: " +input+ " years old");

  }

}

Upvotes: 2

Views: 5795

Answers (5)

deezy
deezy

Reputation: 1480

You can use an if statement to check if user_input hasNextInt(). If the input is an integer, then set input equal to user_input.nextInt(). Otherwise, display a message stating that the input is invalid. This should prevent exceptions.

System.out.println("What is your age? : ");
if(user_input.hasNextInt()) {
    input = user_input.nextInt();
}
else {
    System.out.println("That is not an integer.");
}

Here is some more information about hasNextInt() from Javadocs.

On a side note, variable names in Java should follow the lowerMixedCase convention. For example, user_input should be changed to userInput.

Upvotes: 2

Andreas
Andreas

Reputation: 159086

Test using hasNextInt().

Scanner user_input = new Scanner(System.in);
System.out.println("What is your age?");
if (user_input.hasNextInt()) {
    int input = user_input.nextInt();
    System.out.println("You are " + input + " years old");
} else {
    System.out.println("You are a baby");
}

Upvotes: 0

Leah
Leah

Reputation: 458

This is a try-catch block. You need to use this if you want to be sure of not making the program-flow stop.

try { 
  input = user_input.nextInt();
}
catch (InputMismatchException exception) { //here you can catch that exception, so program will not stop
  System.out.println("Integers only, please."); //this is a comment
  scanner.nextLine(); //gives a possibility to try giving an input again
}

Upvotes: 0

Francisco Romero
Francisco Romero

Reputation: 13189

You can add a try-catch block:

import java.util.Scanner;

class MyWorld {

public static void main(String[] args) {

   Scanner user_input = new Scanner(System.in);

   int input = 0;   

   System.out.println("What is your age? : ");

   try{
       input = user_input.nextInt();
   }catch(InputMisMatchException ex)
       System.out.println("An error ocurred");
   }

   System.out.println("You are: " +input+ " years old");

  }
}

If you want to provide the user to enter another int you can create a boolean variable and make a do-while loop to repeat it. As follows:

boolean end = false;

//code

do
{
   try{
       input = user_input.nextInt();
       end = true;
   }catch(InputMisMatchException ex)
       System.out.println("An error ocurred");
       end = false;
       System.out.println("Try again");
       input.nextLine();
   }
}while(end == false);

Upvotes: 0

Raman Shrivastava
Raman Shrivastava

Reputation: 2953

Use Scanner's next() method to get data instead of using nextInt(). Then parse it to integer using int input = Integer.parseInt(inputString); parseInt() method throws NumberFormatException if it is not int, which you can handle accordingly.

Upvotes: -1

Related Questions