逆波兰计算器
要求
1.输入一个逆波兰表达式(后缀表达式),使用栈(Stack), 计算其结果
2.支持小括号和多位数整数。
思路分析
代码实现
public class Calculator_back {
public static void main(String[] args) {
String expresion="3 4 + 5 * 6 -";
//将表达式存入数组中去
List<String> list = Calculator_back.getList(expresion);
System.out.println(list);
//计算表达式
int cal=cal(list);
System.out.println(cal);
}
public static List<String> getList(String expresion){
String[] split = expresion.split(" ");
List<String> list=new ArrayList<String>();
for (String ls:split){
list.add(ls);
}
return list;
}
public static int cal(List<String> list){
Stack<String> stack = new Stack();
for (String ls:list){
if (ls.matches("\\d+")){
stack.push(ls);
}else {
int num1=Integer.parseInt(stack.pop());
int num2=Integer.parseInt(stack.pop());
int res=calNum(num1,num2,ls);
stack.push(""+res);
}
}
return Integer.parseInt((String) stack.pop());
}
//计算方法
public static int calNum(int num1,int num2,String oper){
int res=0;
switch (oper){
case "+":
res=num1+num2;
break;
//注意应该用后出来的减去前面出来的数字
case "-":
res=num2-num1;
break;
case "*":
res=num1*num2;
break;
case "/":
res=num1/num2;
break;
default:
throw new RuntimeException("异常");
}
return res;
}
}