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)
我该如何解决?
在这里你可以看到扫描仪的本质:
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值.当我输入一个数值时,它运行没有任何错误.但是,一旦我进入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;
}
}
Run Code Online (Sandbox Code Playgroud)
如你所说,你试图进入1.0,2.8等等.请尝试使用此代码.
注意:请在单独的行中逐个输入数字.我的意思是,输入2.7,按回车键然后输入第二个号码(例如6.7).