我有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
有人能帮助我吗?
SOLUTION:JEval
@AudriusMeškauskas的链接中包含的(强大)库列表。我读JEval
features,我测试了它,它的功能就像一个魅力!
Evaluator evaluator = new Evaluator();
System.out.println("eval : " + evaluator.evaluate("1 + 2 - 3 * 4/5 + 6"));
输出:6.6
在你的例子中,你永远不会使用第二个 - 。你应该有1个运营商少于文字的数量 – Cruncher
我会说,[使用一些免费提供的库](http://stackoverflow.com/questions/7258538/free-java-library-for-evaluating-math-expressions)评估数学表达式。 – h22
感谢@AudriusMeškauskas,JEval可能解决我的问题!我会回来 ! –