尝试捕获异常处理无法提供正确的响应

时间:2018-11-14 01:07:10

标签: java exception error-handling exception-handling try-catch

我不确定为什么输入整数以外的任何内容时,输出未显示Invalid Format!

这是我要实现的异常处理。另外,如何在Scanner子句中关闭finally而不引起无限循环。

class ConsoleInput {

public static int getValidatedInteger(int i, int j) {
    Scanner scr = new Scanner(System.in);
    int numInt = 0;

    while (numInt < i || numInt > j) {
        try {
            System.out.print("Please input an integer between 4 and 19 inclusive: ");
            numInt = scr.nextInt();

            if (numInt < i || numInt > j) {
                throw new Exception("Invalid Range!");
            } else {
                throw new InputMismatchException("Invalid Format!");
            }

        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            scr.next();

        }

    }
    scr.close();
    return numInt;
}

这是我想要获得的输出:

3 个答案:

答案 0 :(得分:1)

如果您输入的不是int,则错误将被抛出:

 numInt = scr.nextInt();

然后被赶上catch块,从而跳过打印语句。您需要检查是否存在下一个int:

if(!scr.hasNextInt()) {
   throw new InputMismatchException("Invalid Format!");
}
  

此外,如何在finally子句中关闭扫描程序而又不会导致无限循环。

您无需在finally块中关闭Scanner。实际上,您根本不应该关闭它。关闭System.in是错误的做法。通常,如果您没有打开资源,则不应关闭它。

答案 1 :(得分:0)

您需要在Exception catch块之前的另一个catch块中捕获InputMismatchException并添加scr.next();。如下所示:

public static int getValidatedInteger(int i, int j) {
    Scanner scr = new Scanner(System.in);
    int numInt = 0;

    while (numInt < i || numInt > j) {
        try {
            System.out.print("Please input an integer between 4 and 19 inclusive: ");
            numInt = scr.nextInt();

            if (numInt < i || numInt > j) {
                throw new Exception("Invalid Range!");
            }
        } catch (InputMismatchException ex) {
            System.out.println("Invalid Format!");
            scr.next();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            scr.next();

        }

    }
    scr.close();
    return numInt;
}

答案 2 :(得分:-1)

下面的代码将为您工作,这是您可以用来获取期望输出的另一种方法。 在这段代码中,我处理了catch块中的InputMismatch。

MyProject