【发布时间】:2021-04-06 17:43:49
【问题描述】:
我知道我在这里很困难,但我似乎无法理解为什么我们不能只创建两次 Scanner 类的实例。我会添加一个示例以防万一。
import java.util.Scanner;
public class Nope
{
public static void main(String[] args)
{
System.out.println("What's your name?");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println("Welcome " + name + "!");
scanner.close();
// Now
System.out.println("where you do live?");
Scanner sc = new Scanner(System.in);
String country = sc.nextLine();
System.out.println("That's a lovely place");
sc.close();
}
}
我得到一个看起来像这样的运行时错误
What's your name?
Kate
Welcome Kate!
Exception in thread "main" where you do live?
java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at Nope.main(Nope.java:17)
我知道再次创建同一个类的新对象是没有意义的,鼓励冗余。但我只是觉得如果我知道原因,我的头脑就会清醒了,你不也是这么想的吗?
'java.util.NoSuchElementException: No line found'和人们说扫描仪不可克隆是什么意思。
PS:我故意关闭了我的第一个扫描仪并创建了一个新对象只是为了理解这个问题。
【问题讨论】:
-
虽然我不知道有任何应用程序需要同时使用 2 台扫描仪,但它确实有效。您的示例中的问题是,您在使用第二个扫描仪之前关闭了第一个扫描仪。您需要级联第二个扫描仪。特别是,这意味着所有扫描仪必须按照创建它们的相反顺序关闭。使用自动关闭机制是最安全的方法。请参阅页面下方的示例...
标签: java java.util.scanner nosuchelementexception