到目前为止,我有这样的:
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
我该如何解决?
在这里,您可以看到的性质扫描仪 :
双nextDouble()
返回下一个标记与双。 如果下一个标记是不是一个浮动或超出范围,InputMismatchException时被抛出。
尝试捕获异常
try {
// ...
} catch (InputMismatchException e) {
System.out.print(e.getMessage()); //try to find out specific reason.
}
UPDATE
情况1
我想你的代码,并没有什么不妥的地方。 你获得的是错误,因为,必须输入String
值 。 当我进入了一个数值,它运行没有任何错误。 但是,一旦我进入String
它throw
同样的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.0
, 2.8
和等,请使用此代码尝试。
注:一个请输入一个号码,在不同的行。 我的意思是,输入2.7
,按回车,然后输入第二个数字(如6.7
)。
而是采用了点,像:1.2,尝试输入这样的:1,2。
我遇到同样的问题。 奇怪,但原因是,对象扫描仪解释馏分取决于系统的定位。 如果当前的定位使用逗号分隔的级分的部分,与点的级分将变成String类型。 因此,错误...
既然你有手动用户输入回路,扫描仪已经阅读您的第一个输入后,将通过车厢/返回到其也将读取下一行; 当然,这不是你想要的。
你可以试试这个
try {
// ...
} catch (InputMismatchException e) {
reader.next();
}
,或者也可以消耗致电阅读你的下一个双输入之前回车
reader.next()
你提供写输入到控制台?
Scanner reader = new Scanner(System.in);
num = reader.nextDouble();
这是双重的回报,如果你就像456输入数字在你输入一个字符串或字符,而不是情况下,它会抛出java.util.InputMismatchException当它试图做NUM = reader.nextDouble()。