与System.in一起使用时java.util.Scanner的奇怪行为

时间:2013-01-19 01:48:43

标签: java system.in

这段简单的代码:

import java.util.Scanner;

public class TestScanner {

    public static void main(String[] args){

        Scanner sc1 = new Scanner(System.in);
        int number1 = sc1.nextInt();
        sc1.close();

        Scanner sc2 = new Scanner(System.in);
        int number2 = sc2.nextInt();
        sc2.close();
    }

}

总是给我这个错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:838)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextInt(Scanner.java:2091)
    at java.util.Scanner.nextInt(Scanner.java:2050)
    at mainpkg.TestScanner.main(TestScanner.java:14)

这个也不起作用。这次它落入一个永无止境的循环中!

import java.util.Scanner;

public class TestScanner {

    public static void main(String[] args){

        Scanner sc1 = new Scanner(System.in);
        int number1 = sc1.nextInt();
        sc1.close();

        Scanner sc2 = new Scanner(System.in);
        while(!sc2.hasNextInt())
            ;
        int number2 = sc2.nextInt();
        sc2.close();
    }

}

为什么?

2 个答案:

答案 0 :(得分:2)

问题是sc1.close();关闭了基础流。第二次,你试图从封闭的流中读取,所以它显然失败了。

答案 1 :(得分:0)

您应该每次使用hasNextInt进行检查,而不是仅仅假设还有更多要阅读的内容。