gpt4 book ai didi

Java:使用扫描仪时总是收到 NoSuchElementException

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:13:40 25 4
gpt4 key购买 nike

我有这个简单的代码:

    public class Example {
public Example() {
Scanner scanner = new Scanner(System.in);
int row = scanner.nextInt(); // exception at this line
scanner.close();
}

public static void main(String[] args) {
Example ex1 = new Example(); // this line successfully operate
Example ex2 = new Example(); // exception : no such element exception at above line
}
}

我不知道为什么我总是收到这个异常,当代码运行到 ex2 时。

最佳答案

问题是因为您关闭了 Scanner,它又关闭了底层的 InputStream(在本例中为 stdin)。当您尝试再次使用 stdin 时,Scanner 无法检索任何数据,因为 stdin 已关闭。

如果直接从 commandlne 运行,那么提供对 stdin 的访问的正确方法是使用 Console 类。控制台类提供了一个环绕标准输入的阅读器,它有一个无操作关闭方法。例如。

public class Example {
public Example() {
Scanner scanner = new Scanner(System.console().reader());
// note change on above line
int row = scanner.nextInt();
scanner.close();
}
}

请注意,如果您不是通过控制台类访问标准输入,那么您很可能会给自己带来问题。如果您不是直接从命令行调用 java 程序,那么您将无法访问控制台。例如,以下 will 调用会导致问题。

echo 2 3 | java Example

Process p = new ProcessBuilder("java", "Example").start();
// write data to process

关于Java:使用扫描仪时总是收到 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12759534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com