在InputMismatchException之后,Scanner.nextInt()抛出NoSuchElementException

时间:2018-11-30 02:08:40

标签: java input java.util.scanner

我正在尝试编写一种getInt()方法,该方法将从控制台中提取整数提取到程序的其余部分。

在内部,尝试使用资源-资源是扫描程序;加上不可避免的InputMismatchException的捕获块。

它捕获有效输入,很好;并捕获错误的输入。

但是,在递归地尝试捕获输入之后,我的扫描仪立即抛出了NoSuchElementException,这显然与上一个失配错误有关。

我是否需要在第二台扫描仪中清除某些东西,也许是第一台扫描仪遗留下来的东西?


private static int getInt(String name) {
    try (Scanner scanner = new Scanner(System.in)) {
        System.out.printf("Enter %s: ", name);
        return scanner.nextInt();
    } catch (InputMismatchException e) {
        System.out.println("Invalid");
        return getInt(name);
    }
}

我已经尝试实例化扫描器的功能,就像这样:

Scanner scanner = new Scanner(System.in);
getInt(scanner, name);

...

private static int getInt(Scanner scanner, String name) {
    try {
        System.out.printf("Enter %s: ", name);
        return scanner.nextInt();
    } catch (InputMismatchException e) {
        System.out.println("Invalid");
        return getInt(scanner, name);
    }
}

在这里,由于不匹配错误再次发生,我只是得到了栈溢出错误。

0 个答案:

没有答案