2013-04-30 101 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