Java计算器char线程

时间:2019-02-12 14:18:09

标签: java char java.util.scanner calculator

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

输出:

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

请帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用try catch

try {
     // Code
}
Catch ( exception e ) {
    // Code
}

答案 1 :(得分:0)

Scanner类不会像您假定的那样标记您的输入。也就是说,numbers.nextDouble()直到看起来像Double的数据的第一位的末尾才开始读取。它读取整行,并尝试将其解析为Double。之所以会得到InputMismatchException,是因为输入(2323.10ffxcv)与预期的数据类型(Double)不匹配。

您需要找到一种方法来自己对字符串进行标记化,或者只是在其自己的行上输入每个值。即便如此,输入的最后一部分(ffxcv仍然会破坏事情,因为无法将其解析为Double