我得到了一个例外:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at package1.smth.main(clas1.java:19)
当我删除while(go)
部分时,一切正常。但我添加它是为了能够重置程序,现在有一个例外。我还有另一个类似程序的代码,我添加了相同的循环,它没有这个例外
有人能解释一下这是什么问题吗?
public static void main(String[] args) {
boolean go = true;
while (go) {
Scanner input = new Scanner(System.in);
double a = 0;
double b = 0;
double c = 0;
double discriminant = 0;
double d = 0;
System.out.print("Enter a : ");
a = input.nextDouble();
System.out.print("Enter b : ");
b = input.nextDouble();
System.out.print("Enter c : ");
c = input.nextDouble();
discriminant = (b * b - 4 * a * c);
d = Math.sqrt(discriminant);
if (discriminant >= 0.0) {
System.out.println("first answer : " + (-b + d) / (2.0 * a));
System.out.println("second answer : " + (-b - d) / (2.0 * a));
} else if (discriminant == 0.0) {
System.out.println("first answer : " + (-b) / (2.0 * a));
System.out.println("second answer : " + (-b) / (2.0 * a));
} else {
System.out.println("no asnwers.");
input.close();
}
}
}
我已经阅读了与我的问题类似的所有内容,大多数答案来自此网站。我尝试为我的代码实现给定的解决方案,有些不起作用,有些我无法理解如何使用,因为我的代码与问题中的示例不同。我是新手,这可能是我写的第三个节目。
更新 我的最终代码。它显示的唯一问题是“泄漏:扫描仪未关闭”。
package gg;
import java.util.Scanner;
public class hbh {
public static void main(String[] args) {
boolean go = true;
while (go) {
Scanner input = new Scanner(System.in);
double a = 0;
double b = 0;
double c = 0;
double discriminant = 0;
double d = 0;
System.out.print("Enter a: ");
a = input.nextDouble();
System.out.print("Enter b: ");
b = input.nextDouble();
System.out.print("Enter c: ");
c = input.nextDouble();
discriminant = (b * b - 4 * a * c);
d = Math.sqrt(discriminant);
if (discriminant >= 0.0) {
System.out.println("First answer: " + (-b + d) / (2.0*a));
System.out.println("Second answer: " + (-b - d) / (2.0*a));
}
else if (discriminant ==0.0) {
System.out.println("First answer: " + (-b) / (2.0*a));
System.out.println("Second answer: " + (-b) / (2.0*a));
}
else {
System.out.println("No answers");
input.nextLine();
}
}
}
}
答案 0 :(得分:1)
你应该删除
input.close();
关闭System.in
一次后,关闭它后就无法再次使用它。
我找不到来源,但这是证明这是导致问题的原因。
尝试运行以下代码,您将获得完全相同的异常。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
input.close();
Scanner other = new Scanner(System.in);
other.nextDouble();
}
答案 1 :(得分:0)
当您致电numpy.array
时,它不仅会关闭您的扫描仪,还会关闭您的input.close()
。现在,即使关闭扫描仪(并保持扫描值),您仍然会继续迭代循环,这会导致激发。
<强>更新强>
你的代码似乎进入了一个无限循环,因为你没有从循环中断,也没有更新System.in
的值,这在某些时候可能会终止循环。
因此,go
将继续读取值,直到所有输入都用尽并最终抛出scanner
异常(当所有输入都用完时)。