在循环中使用扫描仪时抛出异常?

时间:2015-08-29 22:33:09

标签: java java.util.scanner

我正在努力将整数读入Java列表中,并且我发现了一个异常,当放入Scanner&循环中的nextInt()。

此代码中的Scanner类抛出异常:

do{

        System.out.println("?");
        Scanner in = new Scanner(System.in);
        input = in.nextInt();
        in.close();
        if(input != SENTINEL)
        numberList.add(input);

    }while(input != SENTINEL);

尽管移动扫描仪初始化并在循环外部关闭也可以正常工作:

Scanner in = new Scanner(System.in);
    //receive input integers from user
    do{

        System.out.println("?");
        input = in.nextInt();
        if(input != SENTINEL)
        numberList.add(input);

    }while(input != SENTINEL);
    in.close();

为什么在循环中初始化Scanner类时会发生异常?谢谢!

例外是:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at main.Run.main(Run.java:25)

1 个答案:

答案 0 :(得分:0)

第一个版本崩溃的原因是调用Scanner.close - 也关闭了基础流:System.in

可以通过将Pattern p = Pattern.compile("foo *")包含在System.in方法中不执行任何操作的类(close()的代码取自here)来证明:< / p>

UnClosableDecorator