java程序在“之后出现错误”;bootlean go=true;?
我得到一个例外:java程序在“之后出现错误”;bootlean go=true;?,java,loops,Java,Loops,我得到一个例外: 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.j
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();
}
}
}
我已经阅读了所有我能找到的与我的问题相似的东西,大多数答案都来自这个网站。我试图为我的代码实现给定的解决方案,有些不起作用,有些我不明白如何使用,因为我的代码与问题中的示例不同。我完全是新手,这可能是我写的第三个程序
更新: 我最后的代码。它显示的唯一问题是“泄漏:扫描仪未关闭” 你应该删除
input.close();
当您关闭系统时。在
中关闭一次后,您不能再次使用它
我找不到源头,但这里有一个证据,证明这是造成问题的原因 尝试运行以下代码,您将得到完全相同的异常
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
input.close();
Scanner other = new Scanner(System.in);
other.nextDouble();
}
调用时,
input.close()
它不仅会关闭扫描仪,还会关闭系统。现在,即使扫描器关闭(并保持扫描值),您仍然会在循环中进行迭代,这会导致EXCPATION
更新
您的代码似乎进入无限循环,因为您既没有从循环中中断,也没有更新go
的值,该值在某个点上可能会终止循环
因此,扫描器
将一直读取值,直到所有输入都用尽,并最终抛出java.util.NoSuchElementException
异常(当所有输入都用尽时)。去掉通配符*。我想知道何时会输入此else if(discriminant==0.0)
块。。。我猜。。。从来没有?我用了3个等式的例子,每一个都属于某个判别结果。如果这就是你要问的……那么请看一下你的代码,告诉我这个else if
块什么时候会被输入。老实说,我不明白你的问题是什么意思,但问题被其他用户的建议解决了。我这样做了,但在这种情况下,程序对每个数字组合都说“没有答案”@Evan这是另一个问题。当然是你的算法。接受这个答案,因为它解决了您的问题,并询问有关算法的新答案。:)谢谢问题是,当我没有“布尔go=true;而(go){”,程序给了我正确的答案。因此,如果算法运行良好,Eclipse没有提到任何错误,我不确定算法中会出现什么错误,加上我完全是新手haha@Evan一旦你循环,你会不止一次地要求在关闭System.in之后使用它。input.nextLine()有效!非常感谢:)我可以插入input.close()吗去另一个地方工作?@Evan:查看我帖子中的更新谢谢你的解释。另一个答案对我帮助更大。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
input.close();
Scanner other = new Scanner(System.in);
other.nextDouble();
}