public int eval(String[] arr) {
String operations = "+-*/";
Stack<String> stack = new Stack<String>();
for (String s : arr) {
if (!operations.contains(s)) {
stack.push(s);
} else {
int d1 = Integer.valueOf(stack.pop());
int d2 = Integer.valueOf(stack.pop());
int i = operations.indexOf(s);
switch (i) {
case 0:
stack.push(String.valueOf(d1 + d2));
break;
case 1:
stack.push(String.valueOf(d2 - d1));
break;
case 2:
stack.push(String.valueOf(d1 * d2));
break;
case 3:
stack.push(String.valueOf(d2 / d1));
break;
}
}
}
return Integer.valueOf(stack.pop());
}
@Test
public void test() {
/*
* 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,
* 所以,这种表示法也称为中缀表示。
*
* 波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。
* 按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
*/
String[] s = {"4","3","5","+","*"};
/*
* 先算3 + 5
* 再算4 * 8
*/
Integer result = this.eval(s);
System.out.println(result);
// 2 + 9 * 10 - 4 / 2
s = new String[]{"2","9","10","*","+","4","2","/","-"};
result = this.eval(s);
System.out.println(result);
}逆波兰表达式java实现
最新推荐文章于 2024-07-09 23:55:08 发布
1539

被折叠的 条评论
为什么被折叠?



