簡單四則運算運算式的java實現

來源:互聯網
上載者:User

標籤:

思路:

  1  將運算式轉換成尾碼運算式

  2 利用棧計算尾碼運算式

/**       * 計算數值       * @param text       * @return       */      public static int count(String text)      {          Queue<String> queue=changeToPostOrder(text);          Stack<Integer> stack=new Stack<>();          int result=0;          while(!queue.isEmpty())          {              String t=queue.poll();              if(t.length()>1)//數字              {                  stack.push(Integer.parseInt(t));              }              else if(t.length()==1)              {                  if(isYunsuanfu(t))                  {                      char c=t.charAt(0);                      int ri=stack.pop();                      int li=stack.pop();                      switch (c) {                    case ‘+‘:                        result=li+ri;                        stack.push(result);                        break;                    case ‘-‘:                        result=li-ri;                        stack.push(result);                        break;                    case ‘*‘:                        result=li*ri;                        stack.push(result);                        break;                    case ‘/‘:                        result=li/ri;                        stack.push(result);                        break;                    default:                        break;                    }                  }                  else                   {                      stack.push(Integer.parseInt(t));                }            }          }          return stack.empty()?0:stack.pop();      }            //change to post order      /**       * 遇到數字直接輸出,遇到符號,假如是高於棧頂優先順序如乘除就直接壓棧,       * 假如是低於或等於棧頂優先順序或者是右括弧直接輸出棧頂直到左括弧,再壓棧       * @param text       * @return       */      public static Queue<String> changeToPostOrder(String text)      {          Queue<String> queue=new LinkedList<>();          Stack<Character> stack=new Stack<>();          StringBuilder temp=new StringBuilder();          int len=text.length();          for(int i=0;i<len;i++)          {              char c=text.charAt(i);              if (isNumber(c)) {                temp.append(c);                if(i==len-1)                {                    queue.offer(temp.toString());                }            }else {                //如果是右括弧  直接輸出直到左括弧                if(temp.length()!=0)                {                    queue.offer(temp.toString());                    temp.delete(0, temp.length());                }                if(c==‘)‘)                {                    while(stack.peek()!=‘(‘)                    {                        queue.offer(stack.pop()+"");                    }                    //彈出左括弧                    stack.pop();                    continue;                }                //如果棧為空白直接壓棧                if(stack.empty() || c==‘(‘)                {                    stack.push(c);                    continue;                }                                //優先順序比較  高優先順序 壓棧                while(!stack.empty() && !isHigher(c, stack.peek()))                {                    queue.offer(stack.pop()+"");                }                stack.push(c);            }          }          while(!stack.empty())          {              queue.offer(stack.pop()+"");          }          return queue;      }            public static boolean isNumber(char c)      {          return c>=‘0‘ && c<=‘9‘;      }            public static boolean isYunsuanfu(String s)      {          return s.equals("*") || s.equals("/") || s.equals("+") || s.equals("-");      }            public static boolean isHigher(char c,char cmp)      {          return priority(c)>priority(cmp);      }            public static int priority(char c)      {          int p=0;          switch (c) {        case ‘*‘:            p=2;            break;        case ‘/‘:            p=2;            break;        case ‘+‘:            p=1;            break;        case ‘-‘:            p=1;            break;        default:            break;        }          return p;      }

 

 

程式很羅嗦,有空再寫一遍!

簡單四則運算運算式的java實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.