gpt4 book ai didi

java - 表达式树求值 java.lang.NumberFormatException java

转载 作者:行者123 更新时间:2023-12-01 14:38:01 26 4
gpt4 key购买 nike

我创建了一个包含三个类的表达式树(一个用于计算表达式的树结构,并给出它的后缀和中缀表示法(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);
}
}

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

最佳答案

某些代码(您没有显示)试图将“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 可能导致的令人讨厌的浮点精度问题。

关于java - 表达式树求值 java.lang.NumberFormatException java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16296916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com