-->

为什么我收到InputMismatchException时?(Why am I getting In

2019-07-17 13:15发布

到目前为止,我有这样的:

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;
}

还有这个:

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++;
    }
}

当我测试这一点,不能采取双重的号码,我得到这个消息:

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

我该如何解决?

Answer 1:

在这里,您可以看到的性质扫描仪 :

双nextDouble()

返回下一个标记与双。 如果下一个标记是不是一个浮动或超出范围,InputMismatchException时被抛出。

尝试捕获异常

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

UPDATE

情况1

我想你的代码,并没有什么不妥的地方。 你获得的是错误,因为,必须输入String 。 当我进入了一个数值,它运行没有任何错误。 但是,一旦我进入Stringthrow同样的Exception ,你在你的问题提到。

案例2

您输入的东西,这是超出范围正如我上面提到的。

我真的想知道你可以尝试进入。 在我的系统,它是在不改变的一行代码运行完美。 只需复制,因为它是和尝试编译并运行它。

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;
    }
}

至于你说的,你已经尝试进入1.02.8和等,请使用此代码尝试。

注:一个请输入一个号码,在不同的行。 我的意思是,输入2.7 ,按回车,然后输入第二个数字(如6.7 )。



Answer 2:

而是采用了点,像:1.2,尝试输入这样的:1,2。



Answer 3:

我遇到同样的问题。 奇怪,但原因是,对象扫描仪解释馏分取决于系统的定位。 如果当前的定位使用逗号分隔的级分的部分,与点的级分将变成String类型。 因此,错误...



Answer 4:

既然你有手动用户输入回路,扫描仪已经阅读您的第一个输入后,将通过车厢/返回到其也将读取下一行; 当然,这不是你想要的。

你可以试试这个

try {
    // ...
} catch (InputMismatchException e) {
    reader.next(); 
}

,或者也可以消耗致电阅读你的下一个双输入之前回车

reader.next()



Answer 5:

你提供写输入到控制台?

Scanner reader = new Scanner(System.in);
num = reader.nextDouble();  

这是双重的回报,如果你就像456输入数字在你输入一个字符串或字符,而不是情况下,它会抛出java.util.InputMismatchException当它试图做NUM = reader.nextDouble()。



文章来源: Why am I getting InputMismatchException?