java - 为什么扫描仪不在 try-catch while 循环 java 中要求其他输入

标签 java exception-handling double java.util.scanner

假设我需要不断询问用户,直到他输入一个double

我所做的是使用 while 循环并检查是否有异常。

如果有异常,我会去询问下一个输入。

double bal = 0;
Scanner sc = new Scanner(System.in);
while (true) {
    try {
        System.out.println("Enter the balance");
        bal = sc.nextDouble();
        break;
        } catch (Exception e) {
          System.out.println("That isn't a number");
    }
}
System.out.println("Bal is " + bal);
sc.close();

但如果我输入一个非 double 值,那么它不会要求下一个输入,而是继续打印以无限循环结尾的这两行。

Enter the balance
XYZ
That isn't a number
Enter the balance
That isn't a number
Enter the balance
That isn't a number
Enter the balance
That isn't a number
....

我缺少什么?

最佳答案

您需要通过在 catch block 中调用 sc.next() 来丢弃流中的先前输入。遗憾的是,当输入失败时,扫描仪不会自动执行此操作。

关于java - 为什么扫描仪不在 try-catch while 循环 java 中要求其他输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305011/

相关文章:

java - 如何正确捕获 MySQLIntegrityConstraintViolationException?

c++ - 如何在 Qt 中打印所有小数点的 double 值?

Java 8 ParallelStream 内部 Web 应用程序容器

java - 如何在不破坏资源映射的情况下隐式映射文件夹 View ?

java - Queue#offer() 应该优先于 Queue#add() 吗?为什么?

java - 从 PL/SQL 调用/使用 JMS

java - 在哪里抛出异常句柄?

python - 单行异常处理

java - 将 Double 从 Delphi/Pascal 转换为 Java

c - C 中接受带有十进制值的较大数字