1. 程式人生 > 實用技巧 >(精華)2020年8月9日 C#基礎知識點 特性

(精華)2020年8月9日 C#基礎知識點 特性

技術標籤:資料結構資料結構

逆波蘭計算器
要求
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; } }