【问题标题】:How do I return more than 1 value with the same Scanner method?如何使用相同的 Scanner 方法返回超过 1 个值?
【发布时间】:2018-05-19 17:12:34
【问题描述】:

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

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

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) 时返回用户输入,并且在除此之外的任何调用中我都会收到这些错误消息。

【问题讨论】:

    标签: java java.util.scanner nosuchelementexception


    【解决方案1】:

    来自java.util.Scanner:

    public void close()
    

    关闭此扫描仪。

    如果这个扫描器还没有关闭,那么如果它的底层可读也实现了 Closeable 接口,那么可读的 close 方法将被调用。如果此扫描器已关闭,则调用此方法将无效。

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

    所以当您执行number.close() 时,您不仅仅是关闭刚刚创建的扫描仪实例;你也关闭了System.in,所以你再也不能使用那个特定的流了。所以不要做number.close(),你会没事的。 System.in 在执行结束时由操作系统自动关闭,因此您无需担心。

    【讨论】:

    • 哦,我明白了,现在一切正常,谢谢!
    • 为什么每次调用 getInput() 时都要创建一个新的 Scanner?你的 Scanner 应该是一个实例变量,只创建一次。此外,您需要处理用户输入非整数的情况。
    • @FredK 感谢您的洞察力,您能否给我一个示例,说明如何在 getInput() 方法之外声明 Scanner?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多