input不匹配例外

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

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

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

 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 

我该如何解决?

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

double nextDouble()

以长整型返回下一个标记。 如果下一个标记不是浮点数或超出范围,则抛出InputMismatchException。

尝试捕捉exception

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

UPDATE

情况1

我试过你的代码,没有什么错。 你得到这个错误,因为你必须inputString 。 当我input一个数值,它运行没有任何错误。 但是,一旦我input了String就会throw你在问题中提到的Exception

情况2

你已经input了一些东西,这已经超出了上面提到的范围

我真的很想知道你可以尝试input什么。 在我的系统中,它运行完美无需更改一行代码。 只要照原样复制并尝试编译并运行即可。

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

正如你所说,你已经尝试input2.8等,请尝试使用此代码。

注意:请在单独的行中input一个一个的号码。 我的意思是,input2.7 ,按回车,然后input第二个数字(例如6.7 )。

而不是使用一个点,如:1.2,尝试像这样input:1,2。

我遇到了同样的问题。 奇怪,但原因是对象Scanner根据系统的本地化解释分数。 如果当前的本地化使用逗号分隔部分分数,那么带点的部分将变成Stringtypes。 因此,错误…

你是否提供写入input到控制台?

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

如果你input的数字是456,那么返回double。如果你input一个string或者字符,它会在它试图执行num = reader.nextDouble()时抛出java.util.InputMismatchException。

既然你有手动的用户input循环,在扫描仪读取你的第一个input之后,它将把传送/返回传送到下一行,这也将被读取; 当然,那不是你想要的。

你可以试试这个

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

或者,也可以在通过调用读取下一个双重input之前消耗该回车

reader.next()