这是我代码中的无效主体。当我编译代码时,它没有显示任何错误,但是当我键入任何随机字母时,它显示了以下线程。
输出:
Please enter the equation :
2323.10ffxcv
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at Calculator.main(calculator.java:31)
[这是CMD中的输出。] [1]
代码:
Calculator calc = new Calculator();
Scanner numbers = new Scanner(System.in);
System.out.println("Please enter the equation : ");
double a = numbers.nextDouble();
char sign = numbers.next().charAt(0);
double b = numbers.nextDouble();
switch (sign) {
case '+':
calc.add(a, b);
break;
case '-':
calc.sub(a, b);
break;
case '*':
calc.multiply(a, b);
break;
case '/':
calc.divide(a, b);
break;
default:
System.out.println("Sorry I ( The program ) did not understand");
while (sign != '+' || sign != '-' || sign != '*' || sign != '/') {
switch (sign) {
case '+':
calc.add(a, b);
break;
case '-':
calc.sub(a, b);
break;
case '*':
calc.multiply(a, b);
break;
case '/':
calc.divide(a, b);
break;
default:
System.out.println("Sorry I ( The program ) did not understand");
break;
}
}
break;
}
请帮助!
答案 0 :(得分:1)
您可以使用try catch
try {
// Code
}
Catch ( exception e ) {
// Code
}
答案 1 :(得分:0)
Scanner
类不会像您假定的那样标记您的输入。也就是说,numbers.nextDouble()
直到看起来像Double
的数据的第一位的末尾才开始读取。它读取整行,并尝试将其解析为Double
。之所以会得到InputMismatchException
,是因为输入(2323.10ffxcv
)与预期的数据类型(Double
)不匹配。
您需要找到一种方法来自己对字符串进行标记化,或者只是在其自己的行上输入每个值。即便如此,输入的最后一部分(ffxcv
仍然会破坏事情,因为无法将其解析为Double
。