Search code examples
javainputmismatchexception

exceptions and infinite loops


    // Precondition: number provided is a positive integer
    // Postcondition: returns a integer of length 4
     public static int validateNumber(int num, Scanner scan)
{
    int number = num;
    while(number < 1000 || number > 9999)
    {
        try
        {
            System.out.print("Number must be 4 digits long. Please provide the number again: ");
            number = scan.nextInt();    // reads next integer provided                                      
            scan.nextLine();
        }
        catch(InputMismatchException e) //outputs error message if value provided is not an integer
        {
            System.out.println("Incorrect input type.");
        }
    }
    return number;
}

Assuming the preconditions are met, when this method gets executed and after entering a string to test the program, I get an infinite loop. Why is this problem occurring and how would I fix it?


Solution

  • To avoid infinite loop when the exception is thrown, you must skip the current line and move on to the next line for processing. Currently, when the exception is thrown, you are re-iterating and scanning the same line which again throws exception and hence you are stuck in infinite loop.

    I think you need to write the scan.nextLine() method call when an exception is thrown.

    catch (InputMismatchException e) // outputs error message if value provided is not an integer
                {
                    System.out.println("Incorrect input type.");
                    // Moved the nextLine() method call over here
                    scan.nextLine();
                }
    

    Also modify the logic to detect if the number is 4 digit or not. Use integer comparison using< and > instead of converting the number into string.