我创建了一个包含三个类的表达式树(一个用于树的结构,用于计算表达式,还给出了它的后缀和中缀表示法(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);
}
}
任何人都可以帮我找到这个神秘的错误吗? 谢谢
答案 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可能导致的令人讨厌的浮点精度问题。