如何使用相同的 Scanner 方法 return 超过 1 个值?

How do I return more than 1 value with the same Scanner method?

首先,如果之前有人问过这个问题,但我找不到解决这个问题的方法,我深表歉意。

我正在尝试 return 用户输入的两个值,但出现这些错误,这是我的代码:

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)

它 return 仅在第一次调用 (int a) 时才需要用户输入,我在之后的任何调用中都会收到这些错误消息。

来自java.util.Scanner

public void close()

Closes this scanner.

If this scanner has not yet been closed then if its underlying readable also implements the Closeable interface then the readable's close method will be invoked. If this scanner is already closed then invoking this method will have no effect.

Attempting to perform search operations after a scanner has been closed will result in an IllegalStateException.

因此,当您执行 number.close() 时,您不仅仅是关闭刚刚创建的扫描器实例;您还将关闭 System.in,因此您将永远无法再次使用该特定流。所以不要做 number.close() 你会没事的。 System.in 在执行结束时由 OS 自动关闭,因此您无需担心。