Calipee
Calipee

Reputation: 373

How to avoid endless loop when testing if input is integer

I'm trying to only allow an integer input and stop my programm from breaking when something else is entered. Somehow my code creates an endless loop and doesn't let me enter a new input.

    private static int x;

    public static void main(String[] args) {
        testInput();
    }

    public static void testInput(){
        while (true){
            System.out.println("Please enter Integer:");
            try{
                setX(scanner.nextInt());
                break;
            }catch (InputMismatchException i){
                System.out.println("Please use Integer");
            }
        }
    }

    public static void setX(int integer){
        x = integer;
    }
}

Creates endless loop which says: Please enter Integer: , Please use Integer instead of letting me make new input.

Upvotes: 1

Views: 89

Answers (1)

Sash Sinha
Sash Sinha

Reputation: 22350

You're on the right track with a while loop, basically, you just need to use Scanner.next() when the user enters something other than an integer:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String prompt = "Please enter an integer: ";
        int userInteger = getIntegerInput(prompt, scanner);
        System.out.printf("You entered: %d%n", userInteger);
    }

    private static int getIntegerInput(String prompt, Scanner scanner) {
        System.out.print(prompt);
        int validInteger = -1;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                validInteger = scanner.nextInt();
                break;
            } else {
                System.out.println("Error: Invalid input, try again...");
                System.out.print(prompt);
                scanner.next();
            }
        }
        return validInteger;
    }
}

Example Usage:

Please enter an integer: a
Error: Invalid input, try again...
Please enter an integer: 😀
Error: Invalid input, try again...
Please enter an integer: 1.0
Error: Invalid input, try again...
Please enter an integer: 6
You entered: 6

Upvotes: 3

Related Questions