(精華)2020年8月9日 C#基礎知識點 特性
阿新 • • 發佈:2020-12-30
逆波蘭計算器
要求
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;
}
}