【发布时间】:2013-09-03 14:11:09
【问题描述】:
我有 2 个数组:
int[] values = {1, 2, 3, 4, 5, 6};
int[] operators = {PLUS, MINUS, MULTIPLY, MINUS, DIVIDE, PLUS}
括号中的大写单词是定义的常量。
我想使用相应的运算符(+、-、*、/、+)来评估values array 中的值:
1 + 2 - 3 * 4 / 5 + 6 = 1 + 2 - (3*4/5) + 6 = 6.6 // expected result
我创建了一个方法(使用switch case),基于上述常量来了解我应该使用哪些运算符。
public static int evaluate(int a, int b, int op) {
int result = 0;
switch (op) {
case PLUS:
result = a + b;
break;
case MINUS:
result = a - b;
break;
/* .... */
}
return result;
}
但是正如你所看到的,使用这种方法结果将是错误的:这就是为什么执行时我得到了:
1+2-3*4/5+6 = ((((1+2)-3)*4)/5)+6 = 0*4/5+6 = 0 / 5 + 6 = 0 + 6 = 6 // not the expected result
有人可以帮助我吗?
解决方案:JEval
@AudriusMeškauskas 的链接包含一个(强大的)库列表。我阅读了JEval features,我对其进行了测试,它的工作原理就像一个魅力!
Evaluator evaluator = new Evaluator();
System.out.println("eval : " + evaluator.evaluate("1 + 2 - 3 * 4 / 5 + 6"));
输出:6.6
【问题讨论】:
-
在您的示例中,您从不使用第二个 -。您应该比文字数少 1 个运算符
-
我会说,use some freely available library 来评估数学表达式。
-
感谢@AudriusMeškauskas,JEval 可以解决我的问题!我会回来的!
-
@AudriusMeškauskas JEval 做了这些事情!非常感谢
标签: java arrays math operators