为什么我的 Java 计算器中的 * 不起作用

Why does * in my Java calculator not work

所以我正在开发一个非常简单的 java 计算器,没有任何扫描仪。 计算器可以计算+、-、/和* 每个运算符都有效,但 * 除外,但我不明白为什么

public class Calculator2 {
    public static void main(String[] args){

      
        double ersteZahl = Double.parseDouble(args[0]);


       
        double zweiteZahl = Double.parseDouble(args[2]);
       
        char operator = args[1].charAt(0);


        switch (operator) {

            case '+':
                System.out.println(ersteZahl + zweiteZahl);
                break;

            case '-':
                System.out.println(ersteZahl - zweiteZahl);
                break;

            case '*':
                System.out.println(ersteZahl * zweiteZahl);
                break;

            case '/':
                System.out.println(ersteZahl / zweiteZahl);
                break;

        }
    }
}

这是我尝试乘法时的错误

PS C:\Users\Besitzer\onedrive\desktop\java> java Calculator2 10 * 2
Exception in thread "main" java.lang.NumberFormatException: For input string: "Calculator.java"
        at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
        at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
        at java.base/java.lang.Double.parseDouble(Double.java:651)
        at Calculator2.main(Calculator2.java:10)

我会说问题不在你的程序,而是在你的操作系统(OS)。

我假设您是从 Linux shell 执行此操作的,尽管其他 OSes 可能有类似的问题。

当您 运行 命令行 java Calculator2 10 * 2 时, OS 会将 * 字符扩展到当前文件夹中的所有文件名中。这发生在之前 你的程序甚至开始 运行ning 所以当你的主函数被调用时,args 将类似于 [10Calculator2.javamynotes.txtsome_other_file.objxyz.bat2]。通常这就是您想要的:您不希望 rm * 删除一个名为 * 的文件,但实际上让它对文件夹中的所有文件名起作用。

您可以通过编写一个打印参数的测试应用程序来验证这一点,实际上您无论如何都应该添加错误处理,这样程序就不会崩溃,而是显示类似 计算无效:参数需要一个数字2 但得到 'mynotes.txt')

尝试 运行将其设置为 java Calculator 10 '*' 2。或者在您的代码中使用另一个字符,例如 x 进行乘法运算。