2013-04-30 1 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) 

내 방식 평가()이 같다 :

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()'를 호출하지 않으므로이 예외를 throw 할 수 없습니다. 예외가 throw되지 않았거나 던져진 코드가 아닙니다. 진짜 질문이 아닙니다. – EJP

+0

이것은 정확히 내 코드 –

답변

1

일부 코드 (표시하지 않음)가 "3.5"를 int로 구문 분석하려고 시도하는데 작동하지 않습니다. (대신 사용해 Double.parseDouble있다) 위의 코드는 당신이 모든 것을 다시 컴파일하려고 실행하는 생각하는 경우

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

라인 (68)

, Expr.java에서 살펴 보자.

Double에서 발생할 수있는 부동 소수점 정밀도 문제를 방지하는 BigDecimal 사용을 고려해 볼 수도 있습니다.

+0

입니다. 내 오류를 발견했습니다. :) –