【问题标题】:Java Calculator char threadJava 计算器字符线程
【发布时间】:2019-02-12 14:18:08
【问题描述】:

这是我的代码中的 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;
}

请帮忙!

【问题讨论】:

  • 问题位于您的calculator.java 31 号码行
  • 它是一个运行时异常,告诉您输入不匹配。正如预期的那样,输入字母来计算某些东西会破坏您的应用程序。我认为按预期工作。
  • 发生这种情况是因为您尝试使用 numbers.nextDouble(); 读取双精度,但提供了字母。您可以将其放在 try/catch 块中以捕获无效输入,或使用 nextLine() 并自己验证 String
  • 但它会使用switch验证字符串

标签: java char java.util.scanner calculator


【解决方案1】:

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

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

【讨论】:

  • 那我应该把数据类型改成string (numbers.nextLine) 吗?
  • @KaranGandhi 知道您要做什么会有所帮助。 2323.10ffxcv 甚至不是一个有效的等式。当您提供该输入时,您期望会发生什么?
  • 当我输入或出错时,它应该打印Sorry I did not understand what you are saying
  • @KaranGandhi,当扫描仪无法解析您的输入时,它会引发异常。因此,为了能够处理错误输入的情况,您需要用 try/catch 块包围代码的相关部分,其中所需的错误输出在 catch 语句中完成。
猜你喜欢
  • 1970-01-01
  • 2021-07-08
  • 2016-08-23
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多