gpt4 book ai didi

java - 在方法中重新打开扫描仪时出现 NoSuchElementException

转载 作者:行者123 更新时间:2023-11-29 04:13:32 25 4
gpt4 key购买 nike

这是抛出异常的代码的简化版本。

static String s1;
static String s2;

static void getString(String s) {
Scanner sc = new Scanner(System.in);
s = sc.nextLine();
sc.close();
}

public static void main(String[] args) {
getString(s1);
getString(s2);
}

Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Scanner.java:1540) at temp.Temp.getString(Temp.java:13)

我调用了两次 getString 方法,在第二次调用时它中断了:

s = sc.nextLine();

现在,我明白删除 sc.close() 行可以解决问题(也可能使 sc 成为静态变量)。我需要了解的是为什么会这样。

我阅读了 scanner 类的规范,但无法推断。我还阅读了有关此异常的几篇文章,包括 this一个,它表示关闭扫描器也会关闭底层流。但是我正在创建一个新的扫描器并在每次方法调用时重新打开流,不是吗?

最佳答案

没有“重新打开流”这样的东西。您唯一可以做的就是使用新的 Scanner 创建一个新的流,并有选择地将它放在同一个变量中。

一旦您关闭sc,您也会关闭底层的System.in 流。在其之上创建一个新的 Scanner 无法“重新打开”它,并且由于流已关闭,您会收到此异常。

长话短说 - 虽然在使用完资源后关闭资源绝对是一个好习惯,但您不应该关闭 System.in(或任何基于它的扫描器) .

关于java - 在方法中重新打开扫描仪时出现 NoSuchElementException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53646089/

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