<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 41, comments - 15, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    java處理字符串的四則運算

    Posted on 2012-12-11 16:24 yuhaibo736 閱讀(1137) 評論(0)  編輯  收藏


    package com.cbd.dk.test;

    import java.util.ListIterator;
    import java.util.Stack;

    public class Test {

     private String src;

     public Test(String src) {
      this.src = src;
     }
     public double getResult() {
      String postfix = getPostfix();
      Stack<String> stk = new Stack<String>();
      //System.out.println(postfix);
      String parts[] = postfix.split(" +");
      double result=0;
      for(int i=0; i<parts.length; i++){
       char tmp = parts[i].charAt(0);
       if(!isOperator(tmp)){
        stk.push(parts[i]);
       }else{
        double a = Double.parseDouble(stk.pop());
        double b = Double.parseDouble(stk.pop());
        result = calculate(b,a,tmp);
        stk.push(String.valueOf(result));
       }
      }
      return result;
     }


     /**
      * test if the character is an operator,such +,-,*,/
      * @param op  the character to test
      * @return  true if op is an operator otherwise false
      */
     private boolean isOperator(char op){
      return (op=='+'||op=='-'||op=='*'||op=='/');
     }


     /**
      * calculate an expression such (a op b)
      * @param a  number 1
      * @param b  number 2
      * @param op the operator
      * @return  (double)(a op b)
      */
     public double calculate(double a, double b, char op) {
      switch (op) {
       case '+':
        return a + b;
       case '-':
        return a - b;
       case '*':
        return a * b;
       case '/':
        return a / b;
      }
      return -1;
     }


     /**
      * convert the suffix to postfix
      * @return the postfix as a string
      */
     private String getPostfix() {
      Stack<String> stk = new Stack<String>();
      String postfix = new String();
      char op;
      int i = 0;
      while (i < src.length()) {
       if (Character.isDigit(src.charAt(i))||src.charAt(i)=='.') {
        postfix += " ";
        do {
         postfix += src.charAt(i++);
        } while ((i < src.length()) && (Character.isDigit(src.charAt(i))));
        postfix += " ";
       }else {
        switch (op = src.charAt(i++)) {
         case '(':
          stk.push("(");
          break;
         case ')':
          while (stk.peek() != "(") {
           String tmp = stk.pop();
           postfix += tmp;
           if(tmp.length()==1 && isOperator(tmp.charAt(0)))
            postfix += " ";
          }
          stk.pop();
          postfix += " ";
          break;
         case '+':
         case '-':
          while ((!stk.empty()) && (stk.peek() != "(")) {
           postfix += stk.pop()+" ";
          }
          stk.push(new Character(op).toString());
          break;
         case '*':
         case '/':
          while ((!stk.empty()) && ((stk.peek() == "*") || (stk.peek() == "/"))) {
           postfix += stk.pop()+" ";
          }
          stk.push(new Character(op).toString());
          break;
        }
       }
      }
      ListIterator it = stk.listIterator(stk.size());
      while (it.hasPrevious())
       postfix += it.previous() + " ";
      return postfix.trim().replaceAll(" +\\.",".");
     }

     /**
      * main function
      * @param args
      */
     public static void main(String args[]) {
      //System.out.println(new Test("((1.5+6.000)*9+9.36)*(8-8*8+8*7)").getResult());
      System.out.println(new Test("(2+(3*2)/2)").getResult());
     }
    }


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品福利片在线观看| 亚洲国产精品VA在线看黑人| 成人免费乱码大片A毛片| 亚洲αv在线精品糸列| 999国内精品永久免费观看| 精品亚洲福利一区二区| 亚洲AV综合色区无码一区爱AV| 皇色在线视频免费网站| 日本一区二区三区免费高清在线| 亚洲Av综合色区无码专区桃色| 岛国大片免费在线观看| 91免费在线视频| 亚洲欧美日韩中文高清www777 | 一个人看www在线高清免费看| 看免费毛片天天看| 久久av无码专区亚洲av桃花岛| 午夜神器成在线人成在线人免费| 精品国产免费一区二区三区香蕉| 亚洲妇女无套内射精| 久久青青草原亚洲av无码app| 成人亚洲综合天堂| 麻豆视频免费播放| 99re6在线视频精品免费| 亚洲日韩精品无码专区| 婷婷亚洲久悠悠色悠在线播放| 又粗又大又硬又爽的免费视频| 亚洲免费中文字幕| 青青操免费在线观看| 国产午夜亚洲精品不卡| 亚洲中文字幕久久精品无码2021 | 亚洲精品中文字幕| 亚洲综合婷婷久久| 337p日本欧洲亚洲大胆裸体艺术| 日韩精品视频免费在线观看| 91精品啪在线观看国产线免费| 国产黄在线播放免费观看| 自拍偷自拍亚洲精品偷一| 亚洲国产系列一区二区三区| 精品亚洲aⅴ在线观看| 国产A在亚洲线播放| 久99精品视频在线观看婷亚洲片国产一区一级在线 |