gpt4 book ai didi

java - 使用另一个数组中的运算符计算数组的值

转载 作者:行者123 更新时间:2023-11-30 04:15:23 25 4
gpt4 key购买 nike

我有 2 个数组:

int[] values = {1, 2, 3, 4, 5, 6};
int[] operators = {PLUS, MINUS, MULTIPLY, MINUS, DIVIDE, PLUS}

括号中的大写单词是定义的常量。我想使用相应的运算符(+、-、*、/、+)来计算 values 数组 中的值:

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

最佳答案

Edsger Dijkstra 于 1961 年发布了一个解决方案。它被称为 Shunting Yard Algorithm 。原始论文副本可用 here (pdf),如果您有兴趣的话。它考虑了运算符的优先级,而不是像原始解决方案那样简单地从左到右计算。我怀疑 Evaluator 类使用了调车场算法的一些变体来正确计算解决方案。

关于java - 使用另一个数组中的运算符计算数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18539816/

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