如何使用相同的Scanner方法返回多个值?

时间:2018-05-19 17:12:35

标签: java java.util.scanner nosuchelementexception

首先,如果之前已经提出过这个问题,我很抱歉,但我找不到解决这个问题的方法。

我正在尝试通过用户输入返回两个值,但是我收到了这些错误,这是我的代码:

import java.util.Scanner;

public class statistic{
    public static int getInput(){
        Scanner number = new Scanner(System.in);
        System.out.print("Integer value: ");
        int n = number.nextInt();
        number.close();
        return n;
    }

    public static void main(String[] args){
        int a = statistic.getInput();
        int b = statistic.getInput();

这是错误:

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 statistic.getInput(statistic.java:12)
    at statistic.main(statistic.java:19)

它仅为第一次调用(int a)返回用户输入,并且除此之外的任何调用都会收到这些错误消息。

1 个答案:

答案 0 :(得分:1)

来自java.util.Scanner

public void close()
     

关闭此扫描仪。

     

如果此扫描程序尚未关闭,那么如果其底层可读也实现了Closeable接口,则将调用可读的close方法。如果此扫描仪已关闭,则调用此方法将无效。

     

在扫描程序关闭后尝试执行搜索操作将导致IllegalStateException。

因此,当您执行number.close()时,您不只是关闭刚才制作的扫描程序实例;您还关闭System.in,因此您再也不能使用该特定流。所以,不要做number.close(),你就没事了。操作系统会在执行结束时自动关闭System.in,因此您不必担心这一点。