public class PolandExpressionDemo {
/* 计算逆波兰表达式(后缀表达式)结果
假设每个数字或者字符之间用空格隔开
4 * 5 - 8 + 60 + 8 / 2 = 4 5 * 8 - 60 + 8 2 / +
*/
public double calculatePoland(String exp) {String[] strings = exp.split(" ");
Stack<Double> stack = new Stack<>();
for (String s: strings) {
double n1, n2;
switch (s) {
case "*":
n1 = stack.pop();
n2 = stack.pop();
stack.push(n1 * n2);
break;
case "/":
n1 = stack.pop();
n2 = stack.pop();
stack.push(n2 / n1);
break;
case "+":
n1 = stack.pop();
n2 = stack.pop();
stack.push(n1 + n2);
break;
case "-":
n1 = stack.pop();
n2 = stack.pop();
stack.push(n2 - n1);
break;
default:
stack.push(Double.parseDouble(s));
break;
}
}
return stack.pop();}
public static void main(String[] args) {PolandExpressionDemo app = new PolandExpressionDemo();
System.out.println(app.calculatePoland("4 5 * 8 - 60 + 8 2 / +"));
}
}