Search code examples
javainputjava.util.scannerinputmismatchexception

Why am I getting InputMismatchException?


So far I have this:

public double checkValueWithin(int min, int max) {
    double num;
    Scanner reader = new Scanner(System.in);
    num = reader.nextDouble();                         
    while (num < min || num > max) {                 
        System.out.print("Invalid. Re-enter number: "); 
        num = reader.nextDouble();                         
    }
    return num;
}

and this:

public void askForMarks() {
    double marks[] = new double[student];
    int index = 0;
    Scanner reader = new Scanner(System.in);
    while (index < student) {
        System.out.print("Please enter a mark (0..30): ");
        marks[index] = (double) checkValueWithin(0, 30); 
        index++;
    }
}

When I test this, it can't take double number and I got this message:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456)
at MarkingSystem.checkValueWithin(MarkingSystem.java:25)
at MarkingSystem.askForMarks(MarkingSystem.java:44)
at World.main(World.java:6)
Java Result: 1

How do I fix this?


Solution

  • Here you can see the nature of Scanner:

    double nextDouble()

    Returns the next token as a double. If the next token is not a float or is out of range, InputMismatchException is thrown.

    Try to catch the exception

    try {
        // ...
    } catch (InputMismatchException e) {
        System.out.print(e.getMessage()); //try to find out specific reason.
    }
    

    UPDATE

    CASE 1

    I tried your code and there is nothing wrong with it. Your are getting that error because you must have entered String value. When I entered a numeric value, it runs without any errors. But once I entered String it throw the same Exception which you have mentioned in your question.

    CASE 2

    You have entered something, which is out of range as I have mentioned above.

    I'm really wondering what you could have tried to enter. In my system, it is running perfectly without changing a single line of code. Just copy as it is and try to compile and run it.

    import java.util.*;
    
    public class Test {
        public static void main(String... args) {
            new Test().askForMarks(5);
        }
    
        public void askForMarks(int student) {
            double marks[] = new double[student];
            int index = 0;
            Scanner reader = new Scanner(System.in);
            while (index < student) {
                System.out.print("Please enter a mark (0..30): ");
                marks[index] = (double) checkValueWithin(0, 30); 
                index++;
            }
        }
    
        public double checkValueWithin(int min, int max) {
            double num;
            Scanner reader = new Scanner(System.in);
            num = reader.nextDouble();                         
            while (num < min || num > max) {                 
                System.out.print("Invalid. Re-enter number: "); 
                num = reader.nextDouble();                         
            } 
    
            return num;
        }
    }
    

    As you said, you have tried to enter 1.0, 2.8 and etc. Please try with this code.

    Note : Please enter number one by one, on separate lines. I mean, enter 2.7, press enter and then enter second number (e.g. 6.7).