1

这段简单的代码:

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();
    }

}

为什么?

4

2 回答 2

2

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

于 2013-01-19T01:55:54.607 回答
0

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

于 2013-01-19T01:50:23.107 回答