逆波兰表达式又称后缀表达式
主要用于解决让计算机更好的处理计算表达式的优先级的处理方式
public class PostfixExpression {
public static List<String> getListString(String suffisExpression) {
String[] split = suffisExpression.split(" ");
ArrayList<String> list = new ArrayList<>();
for (String str : split) {
list.add(str);
}
return list;
}
public static Double calculate(List<String> list) {
Stack<String> stack = new Stack<>();
for (String item : list) {
if (item.matches("\\d+")) {
stack.push(item);
} else {
Double num1 = Double.parseDouble(stack.pop());
Double num2 = Double.parseDouble(stack.pop());
try {
Double res = cal(num1, num2, item);
stack.push(String.valueOf(res));
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
return Double.parseDouble(stack.pop()) ;
}
private static Double cal(Double num1, Double num2, String item) {
Double res =0d;
switch (item) {
case "+":
res = num2 + num1;
break;
case "-":
res = num2 - num1;
break;
case "*":
res = num2 * num1;
break;
case "/":
res = num2 / num1;
break;
default:
throw new RuntimeException("运算符有误!");
}
return res;
}
public static void main(String[] args) {
String suffisExpression = "3 4 + 5 * 6 -";
List<String> list = PostfixExpression.getListString(suffisExpression);
int result = PostfixExpression.calculate(list);
System.out.println(result);
}