为什么我得到InputMismatchException?

Trầ*_*ung 5 java input java.util.scanner inputmismatchexception

到目前为止我有这个:

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;
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我测试这个,它不能采取双数,我得到这个消息:

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
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

小智 8

而不是使用点,如:1.2,尝试输入如下:1,2.

  • 尝试更改扫描仪的语言环境:`.useLocale(Locale.ENGLISH)` (2认同)

Rav*_*avi 7

在这里你可以看到扫描仪的本质:

double nextDouble()

以double形式返回下一个标记.如果下一个标记不是浮点数或超出范围,则抛出InputMismatchException.

试着抓住异常

try {
    // ...
} catch (InputMismatchException e) {
    System.out.print(e.getMessage()); //try to find out specific reason.
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如你所说,你试图进入1.0,2.8等等.请尝试使用此代码.

注意:请在单独的行中逐个输入数字.我的意思是,输入2.7,按回车键然后输入第二个号码(例如6.7).