MattM
MattM

Reputation: 3

Checking if an input is an Integer using exceptions - Java

My method must request input from the user, check if it is an integer, and if it is return that integer. I attempted this using a try catch and the InputMismatchException.

I am running into an issue when it loops, if I input a non integer, it continuously spits out "Invalid input" "Enter an integer: " instead of actually asking for one.

public int getInteger(){
    Scanner i = new Scanner(System.in);
    int value = 0;

    for(boolean test = false; test == false;){
        try{
        System.out.println("Enter an integer: ");
        value = i.nextInt();

        test = true;
        return value;
        }
        catch(InputMismatchException e){System.out.println("Invalid input");}
    }
    return value;
} 

Upvotes: 0

Views: 11215

Answers (2)

Elliott Frisch
Elliott Frisch

Reputation: 201537

I suggest you call hasNextInt() before nextInt() instead of trying to catch the Exception. Something like,

public int getInteger() {
    Scanner scan = new Scanner(System.in);
    while (scan.hasNextLine()) {
        if (scan.hasNextInt()) {
            return scan.nextInt();
        } else {
            System.out.printf("%s is not an int%n", scan.nextLine());
        }
    }
    return -1;
}

Upvotes: 0

Bhesh Gurung
Bhesh Gurung

Reputation: 51030

You need a i.nextLine(); at the end of the loop.

    catch(InputMismatchException e){System.out.println("Invalid input");}
    i.nextLine();
}

What that does is reads the new line character, left unread by i.nextInt(), from the input stream. It's also the reason your i.nextInt() keeps tripping on the subsequent calls.

Upvotes: 3

Related Questions