import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
//逆波兰计算器的完成--------》后缀表达式的实现---》只支持对整数的计算
public class TsetStack02 {
public static void main(String[] args) {
//先定义一个逆波兰表达式,数字和符号之间用空格隔开
String expression = "3 24 + 53 * 6 -";
List testlist=getListString(expression);
System.out.println(testlist);
int res=Calculator(testlist);
System.out.println(res);
//思路
//将逆波兰表达式顺序放入一个ArraysList中
}
public static List getListString(String expression){
//将expression分割
String[] split=expression.split(" ");
List list=new ArrayList();
for(String ele:split){
list.add(ele);
}
return list;
}
//完成对逆波兰表达式的计算
public static int Calculator(List list){
//创建一个栈,只需要一个栈即可
Stack stack=new Stack<>();
//从list中取出元素
for (String item:list){
if(item.matches("\d+")) {//正则表达式表示多位数
stack.push(item);
}else {
//pop出两个数。并运算
int num2=Integer.parseInt(stack.pop());
int num1=Integer.parseInt(stack.pop());
int res=0;//存放计算结果
if(item.equals("+")){
res=num1+num2;
}else if (item.equals("-")){
res=num1-num2;
}else if(item.equals("*")){
res=num1*num2;
}else if(item.equals("/")){
res=num1/num2;
}else{
throw new RuntimeException("运算符有误");
}
//把res入栈
stack.push(""+res);//把整数转换为字符串
}
}
return Integer.parseInt(stack.pop());
}
}