表达式树求值java.lang.NumberFormatException java

表达式树求值java.lang.NumberFormatException java,java,expression-trees,Java,Expression Trees,我已经创建了一个包含三个类的表达式树(一个用于计算表达式的树的结构,还提供了它的后缀和中缀符号(Expr),另一个只是从表达式(使用堆栈…)构建树,另一个是EvalExpr,它是我的主类) 但是我得到了一个表达式“(2+3.5)”的错误,我不知道它来自哪里。类似这样的错误: Exception in thread "main" java.lang.NumberFormatException: For input string: "3.5" at java.lang.NumberForma

我已经创建了一个包含三个类的表达式树(一个用于计算表达式的树的结构,还提供了它的后缀和中缀符号(Expr),另一个只是从表达式(使用堆栈…)构建树,另一个是EvalExpr,它是我的主类) 但是我得到了一个表达式“(2+3.5)”的错误,我不知道它来自哪里。类似这样的错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "3.5"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at exprTree.Expr.eval(Expr.java:68)
    at exprTree.Expr.eval(Expr.java:74)
    at exprTree.Expr.eval(Expr.java:73)
    at exprTree.Expr.eval(Expr.java:73)
    at EvalExpr.main(EvalExpr.java:42)
public double eval() 
    {
        double leftOperand = 0;
        double rightOperand = 0;
        String operator;

        if(this == null)
            return 0;

        else if(rightChild == null && leftChild == null)
            return Double.parseDouble(value); 

        else 
        {
            operator = value;
            leftOperand = leftChild.eval();
            rightOperand = rightChild.eval();
            return calc(operator, leftOperand, rightOperand);
        }
    }
我的方法eval()如下所示:

Exception in thread "main" java.lang.NumberFormatException: For input string: "3.5"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at exprTree.Expr.eval(Expr.java:68)
    at exprTree.Expr.eval(Expr.java:74)
    at exprTree.Expr.eval(Expr.java:73)
    at exprTree.Expr.eval(Expr.java:73)
    at EvalExpr.main(EvalExpr.java:42)
public double eval() 
    {
        double leftOperand = 0;
        double rightOperand = 0;
        String operator;

        if(this == null)
            return 0;

        else if(rightChild == null && leftChild == null)
            return Double.parseDouble(value); 

        else 
        {
            operator = value;
            leftOperand = leftChild.eval();
            rightOperand = rightChild.eval();
            return calc(operator, leftOperand, rightOperand);
        }
    }
有人能帮我找到这个神秘的错误吗? 谢谢

一些代码(您没有显示)正在尝试将“3.5”解析为int,这是行不通的

at java.lang.Integer.parseInt(Integer.java:527)
at exprTree.Expr.eval(Expr.java:68)
看看Expr.java,第68行

如果上面的代码(改为Double.parseDouble)是您认为正在运行的代码,请尝试重新编译所有代码


我也会考虑使用BigDeCimple,它避免了两个可能引起您的讨厌的浮点精度问题。

您所发布的代码不可能抛出这个异常,因为它不调用<代码>整数.PARSETIN()。因此,要么没有抛出异常,要么不是抛出异常的代码。这不是一个真正的问题。这正是我的代码