Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java程序在“之后出现错误”;bootlean go=true;?_Java_Loops - Fatal编程技术网

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();
}