0

我创建了一个包含三个类的表达式树(一个用于评估表达式的树的结构,并给出它的后缀和中缀表示法(Expr),另一个只是从表达式构建树(使用 stack . ..) 另一个是 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);
        }
    }

谁能帮我找到这个神秘的错误?谢谢

4

1 回答 1

1

某些代码(您没有显示)正在尝试将“3.5”解析为 int,这将不起作用。

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

看看 Expr.java,第 68 行。

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

我还考虑使用 BigDecimal,它可以避免 Double 可能给您带来的讨厌的浮点精度问题。

于 2013-04-30T09:58:25.177 回答