gpt4 book ai didi

java util Scanner 抛出未知源错误(无法键入输入)

转载 作者:行者123 更新时间:2023-12-01 11:29:43 26 4
gpt4 key购买 nike

我的扫描仪有问题,但我真的不知道出了什么问题。我有一个 Circle 类,我想在构造函数上检查其半径的循环。这是代码:

Circle(double x, double y, String color, double radius) {
super(x, y, color); // constructor from class shape which is extended by circle
Scanner r = new Scanner(System.in);

while (radius <= 0)
{
System.out.println("radius has to be > 0.....Give radius again");
if (r.hasNextDouble())
{
radius = r.nextDouble();
}
else
{
r.nextLine(); //25th line
}
}
this.radius = radius;
r.close();
}

如果我把半径设为 0,我就没有机会进行输入,它会给出以下消息:

radius has to be > 0.....Give radius again
Exception in thread "main" java.util.NoSuchElementException:No line found
at java.util.Scanner.nextLine(Unknown Source)
at pack.Circle.<init>(Circle.java:25)
at pack.Main.main(Main.java:11)

出了什么问题?

最佳答案

Scanner.nextLine()如果无法从提供的 InputStream 中读取一行,则抛出 NoSuchElementException 。由于您使用 System.in 作为输入流,并且它会阻塞线程直到它可以读取请求的行,因此只剩下一个原因可能会导致这样的问题:流已经关闭

您正在调用 Scanner.close()在您的 Circle 构造函数中,这不仅会关闭扫描仪,还会关闭使用的输入流。这意味着,变量 System.in 引用的输入流已关闭,并且无法再次打开。因此,如果您已经创建了一个圆圈,或者在代码中的其他位置关闭了流,您将收到上述异常。

要解决此问题,只需删除每个读者的每个 close 调用,例如 ScannerBufferedReader ,它使用 System.in 作为其源流。

然后您应该考虑将 r 变量提取到专用类中。然后,您可以创建扫描仪一次并在您想要请求用户输入的任何地方使用它。如果您想关闭应用程序并执行清理,您可以关闭该扫描仪。

关于java util Scanner 抛出未知源错误(无法键入输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514201/

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