2013-04-30 100 views
0

我创建了一个具有三个类的表达式树(一个用于评估表达式的树的结构,另一个给出了它的后缀和中缀表示法(Expr),另一个一个只是从表达式构建树(使用堆栈...),另一个是EvalExpr,这是我的主) 但我得到表达式“(2 + 3.5)”的错误,我不知道它在哪里来自。这样的错误:)表达式树评估java.lang.NumberFormatException java

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

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

+0

您发布的代码不可能抛出此异常,因为它不会调用'Integer.parseInt()'。 Ergo或者不会抛出异常,或者这不是抛出它的代码。不是一个真正的问题。 – EJP 2013-04-30 10:02:02

+0

这正是我的代码 – 2013-04-30 10:11:19

回答

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可能会导致您讨厌的浮点精度问题。

+0

我发现我的错误感谢球员:) – 2013-04-30 10:19:23