Java 扫描关闭会导致问题,所以我应该让它保持未关闭状态吗?

Java 扫描关闭会导致问题,所以我应该让它保持未关闭状态吗?,java,double,Java,Double,只是从Python切换到Java,在读取用户输入时遇到一些问题。 以下代码中有两个问题: (1) 为什么在我关闭扫描仪后它不能正常工作(如果在跳过关闭后,是否有问题?) (2) 为什么两个简单数字的总和导致不准确的答案3.0300000000000002 import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { String s1 = get

只是从Python切换到Java,在读取用户输入时遇到一些问题。 以下代码中有两个问题: (1) 为什么在我关闭扫描仪后它不能正常工作(如果在跳过关闭后,是否有问题?) (2) 为什么两个简单数字的总和导致不准确的答案3.0300000000000002

import java.util.Scanner;

public class HelloWorld {

    public static void main(String[] args) {
        String s1 = getInput("Enter a numeric value: ");
        String s2 = getInput("Enter a numeric value: ");

        double d1 = Double.parseDouble(s1);
        double d2 = Double.parseDouble(s2);
        double result = d1 + d2;

        System.out.println("The answer is: " + result);
    }

    private static String getInput(String prompt){
        System.out.print(prompt);
        Scanner scan = new Scanner(System.in);

        String input = "DEFAULT";
        try{
            input = scan.nextLine();
        }
        catch (Exception e){
            System.out.println(e.getMessage());
        }
        //scan.close();
        return input;
    }
}
这是注释出扫描结束的输出:

Enter a numeric value: 1.01
Enter a numeric value: 2.02
The answer is: 3.0300000000000002 (weird output)
如果我取消对scan.close()的注释,则无法键入int第二个数字,并附加错误消息:

Enter a numeric value: 1.01
Enter a numeric value: No line found
Exception in thread "main" java.lang.NumberFormatException: For input string: "DEFAULT"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
    at java.lang.Double.parseDouble(Double.java:540)
    at HelloWorld.main(HelloWorld.java:10)

如果你们中的任何人能给我指出正确的地方,或者给我一些关于这两个问题是如何产生的提示,我们将不胜感激

关闭扫描仪将关闭底层流。在您的案例中,System.In。在第二次调用getInput时,您的代码就会崩溃。
考虑使用单模式来存储扫描器的单个实例。

在第一个输入结束时,关闭<强/ >流。您关闭的流是“标准输入流”<代码>扫描仪在调用

close()
时关闭底层流

在第一次调用
getInput(String)
方法后,所有读取“标准输入流”的尝试都将失败


捕捉
异常
是错误的。当它无法读取流时,您将返回
“DEFAULT”
Double.parseDouble(..)
抱怨字符串错误。

For(2)读取!这非常有助于澄清我对数字问题的困惑。Thanks@The新白痴:(我讨厌那个名字),如果你想投票的话,就把你的话作为回答。用户84771:请检查其中一个答案是否与我认为的一样正确。了解Scanner close实际上关闭了“标准输入流”非常有帮助。我的直觉是,你打开某个东西(新扫描仪),然后应该关闭某个东西。但仅仅从代码的角度看,情况并非如此。