表达式树评估java.lang.NumberFormatException java

时间:2013-04-30 09:49:50

标签: java expression-trees

我创建了一个包含三个类的表达式树(一个用于树的结构,用于计算表达式,还给出了它的后缀和中缀表示法(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)

我的方法eval()是这样的:

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

任何人都可以帮我找到这个神秘的错误吗? 谢谢

1 个答案:

答案 0 :(得分:1)

某些代码(您未显示)正在尝试将“3.5”解析为int,这将无效。

at java.lang.Integer.parseInt(Integer.java:527)
at exprTree.Expr.eval(Expr.java:68)

看看第68行的Expr.java。

如果您认为上面的代码(其中包含Double.parseDouble)正在运行,请尝试重新编译所有内容。

我还考虑使用BigDecimal,它可以避免Double可能导致的令人讨厌的浮点精度问题。