Java 计算器 char 线程

Java Calculator char thread

这是我代码中的 void main。当我编译代码时它没有显示任何错误,但是当我键入任何随机字母时它会显示以下线程。

输出:

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

请帮忙!

Scanner class 不会按照您假设的方式标记您的输入。也就是说,numbers.nextDouble() 直到看起来像 Double 的第一位数据结束时才会读取。它读取 整行 ,并尝试将其解析为 Double。您得到一个 InputMismatchException,因为输入 (2323.10ffxcv) 与预期的数据类型 (Double) 不匹配。

您需要找到一种方法来自己标记字符串,或者简单地在其自己的行中输入每个值。即便如此,您输入的最后一部分 (ffxcv) 仍然会破坏内容,因为它不能被解析为 Double.