逆ポーランド式の演算


  • 文字列分割をlistセットに
  • 入れる
  • リスト集合から取り出す一定の規則に従ってスタックに入れる結果
  • .
    package com.hhit.stack;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Stack;
    
    public class PolandNotation {
        public static void main(String[] args) {
            String suffixExpression="30 4 + 5 * 6 -";//(30+4)*5-6
            List<String> lis=getListString(suffixExpression);
            System.out.println(lis);
            System.out.println(calculate(lis));
            //         ,            ArrayList 
        }
    
        public static List<String> getListString(String suffixExpression){
            String[] split=suffixExpression.split(" ");
            List<String> list=new ArrayList<String>();
            for (String s:split){
                list.add(s);
            }
    
            return list;
    
        }
    
        public static  int calculate(List<String> ls){
            //     
            Stack<String> stack=new Stack<String>();
            //  ls
            for (String item:ls){
                //            
                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("     ");
                    }
                    stack.push(""+res);
    
                }
            }
            return Integer.parseInt(stack.pop());
        }
    }