评估表达式的正确语法是什么?
public double evaluate(){
String ans = (expressionOne.getValue())+""+(SignOperator.getName())+""+expressionTwo.getValue()+"";
return Double.parseDouble(ans);
}
expressionOne例如可以是X,他的值是5.5,例如expressionTwo可以是Y,他的值是9.0。
当我试图评估我得到的一些表达时:
线程" main"中的例外情况java.lang.NumberFormatException:对于输入字符串:" 5.5 + 9.0"
第二部分是我要打印一些我创建的表达式toString()
public String toString() {
String ans = expressionOne.toString()+""+SignOperator.getName()+""+expressionTwo.toString()+"";
return ans;
}
例如:
Variable x = new Variable ('x',5.5);
Variable y = new Variable ('y', 3.5);
Constant nine= new Constant (9.0);
Operator plus=new Operator('+');
BinaryExpression xPy = new BinaryExpression(x, plus, y);
BinaryExpression xP9 = new BinaryExpression(x, plus,nine);
当我打印xPy时会给我x + y。
当我打印xP9时 - 它会给我x + 9(因为九是恒定的)。
如何在一个toString中检查表达式是否为常量(只是一个数字)或变量(如示例中所示) - 如何检测它?
修改
正如你所看到的,有两种BinaryExpression - 其中一种是xPy - x,y是两种变量,如果我想评估它们会给我举例(3.0 + 5.0),但是如果我打印它们会给出我x + y,对于第二个例子xP9 - 如果我将评估它将给我(3.0 + 9.0),但如果我将打印它们将给我(x + 9.0)因为九是常数(见问题)。
感谢。
答案 0 :(得分:0)
对于评估,您需要自己评估,Double.parseDouble()
不会为您评估表达式,然后返回结果
Double.parseDouble()
接受一个可表达为double的字符串(你知道“1223.456”确实是一个双重值,它是字符串形式,而“123.45 + 153.4”不是因为它包含“+”字符使得它无效的双值)
如何在一个toString中检查表达式是否为常量(只是一个数字)或变量
您可以使用Character.isDigit()
方法来了解表达式是数字(数字)还是变量(非数字)
答案 1 :(得分:0)
为什么要在evaluate()中创建描述操作的String? 你应该在那里进行双打操作。
我建议在类Operator中添加一个方法:
double apply(double left, double right)
使用适当的实现类。
Operator plus = new Operator('+')
{
double apply(double left, double right) { return left + right; }
};
然后你只需在你的评估方法中调用apply
答案 2 :(得分:0)
我希望这会帮助你在哪里尝试评估整个表达式并为你提供结果。
我知道您正在尝试编写Expression Evaluator引擎,您可以在其中使用以下帖子中使用的脚本引擎。
答案 3 :(得分:-1)
如果要进行算术评估,请查看infix
和postfix
符号。例如:
在修复符号中:
y = 4 + 9 + 3 / 6 * 5;
修复后符号:
y = 4 9 3 6 / 5 * + +;
<强> Refrence 强> http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/index.htm