您的位置:首页 > 编程语言 > Java开发

逆波兰表达式java实现

2014-04-17 17:31 204 查看
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: