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

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

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

    cavenaghi

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      4 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

    package expression;
    public class Calculate{
     public static boolean isOperator(String operator){
      if(operator.equals("+")||operator.equals("-")||operator.equals("*")||operator.equals("/")||operator.equals("(")||operator.equals(")")) return true;
      else return false;
     }
     public static int priority(String operator){
      if(operator.equals("+")||operator.equals("-")||operator.equals("(")) return 1;
      else if(operator.equals("*")||operator.equals("/")) return 2;
      else return 0;
     }
     public static String twoResult(String operator,String a,String b){
      try{
       String op=operator;
       String rs=new String();
       double x=Double.parseDouble(b);
       double y=Double.parseDouble(a);
       double z=0;
       if(op.equals("+")) z=x+y;
       else if(op.equals("-")) z=x-y;
       else if(op.equals("*")) z=x*y;
       else if(op.equals("/")) z=x/y;
       else z=0;
       return rs+z;
      }
      catch(NumberFormatException e){
       System.out.println("input has something wrong!");
       return "Error";
      }
     }
    }

     

     

    package expression;
    import java.util.*;
    public class Stacks{
     private LinkedList list=new LinkedList();
     int top=-1;
     public void push(Object value){
      top++;
      list.addFirst(value);
     }
     public Object pop(){
      Object temp=list.getFirst();
      top--;
      list.removeFirst();
      return temp;

     }
     public Object top(){
      return list.getFirst();
     }
    }

     

    package expression;
    import java.io.*;
    import java.util.*;
    public class Expression{
     private ArrayList expression=new ArrayList();//存儲中序表達式
     private ArrayList right=new ArrayList();//存儲右序表達式
     private String result;//結果
     //依據(jù)輸入信息創(chuàng)建對象,將數(shù)值與操作符放入ArrayList中
     private Expression(String input){
      StringTokenizer st=new StringTokenizer(input,"+-*/()",true);
      while(st.hasMoreElements()){
       expression.add(st.nextToken());
      }
     }
     //將中序表達式轉換為右序表達式
     private void toRight(){
      Stacks aStack=new Stacks();
      String operator;
      int position=0;
      while(true){
       if(Calculate.isOperator((String)expression.get(position))){
        if(aStack.top==-1||((String)expression.get(position)).equals("(")){
         aStack.push(expression.get(position));
        }
        else{
         if(((String)expression.get(position)).equals(")")){
          if(!((String)aStack.top()).equals("(")){
           operator=(String)aStack.pop();
           right.add(operator);
          }
         }
         else{
          if(Calculate.priority((String)expression.get(position))<=Calculate.priority((String)aStack.top())&&aStack.top!=-1){
           operator=(String)aStack.pop();
           if(!operator.equals("(")) right.add(operator);
          }
          aStack.push(expression.get(position));
         }
        }
       }
       else right.add(expression.get(position));
       position++;
       if(position>=expression.size()) break;
      }
      while(aStack.top!=-1){
       operator=(String)aStack.pop();
       right.add(operator);
      }
     }
     //對右序表達式進行求值
     private void getResult(){
      this.toRight();
      Stacks aStack=new Stacks();
      String op1,op2,is=null;
      Iterator it=right.iterator();
      while(it.hasNext()){
       is=(String)it.next();
       if(Calculate.isOperator(is)){
        op1=(String)aStack.pop();
        op2=(String)aStack.pop();
        aStack.push(Calculate.twoResult(is,op1,op2));
       }
       else aStack.push(is);
      }
      result=(String)aStack.pop();
      it=expression.iterator();
      while(it.hasNext()){
       System.out.print((String)it.next());
      }
      System.out.println("="+result);
     }
     public static void main(String avg[]){
      try{
       System.out.println("Input a expression:");
       BufferedReader is=new BufferedReader(new InputStreamReader(System.in));
       for(;;){
        String input=new String();
        input=is.readLine().trim();
        if(input.equals("q")) break;
        else{
         Expression boya=new Expression(input);
         boya.getResult();
        }
        System.out.println("Input another expression or input 'q' to quit:");
       }
       is.close();
      }
      catch(IOException e){
       System.out.println("Wrong input!!!");
      }
     }
    }

    posted on 2005-07-27 11:45 Cavenaghi 閱讀(1008) 評論(1)  編輯  收藏

    Feedback

    # re: 數(shù)據(jù)結構JAVA示例---逆波蘭式求值! 2005-07-27 17:36 蘑菇
    問個弱弱的問題:“逆波蘭式求值”是啥米東西?  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 日本免费网址大全在线观看| a级毛片免费观看视频| 和日本免费不卡在线v| 亚洲自偷自拍另类图片二区| 久久精品国产大片免费观看| 亚洲第一视频网站| 99在线观看免费视频| 亚洲精品国产手机| 99久久国产热无码精品免费| 亚洲国产系列一区二区三区| 大陆一级毛片免费视频观看| 亚洲av无一区二区三区| 四只虎免费永久观看| 一级特黄录像免费播放中文版| 亚洲中文字幕久久精品无码喷水| 99re6在线精品免费观看| 国产日韩亚洲大尺度高清| 久久精品成人免费观看| 亚洲中字慕日产2020| 免费高清av一区二区三区| 美女一级毛片免费观看| 亚洲午夜久久久久久久久电影网 | 亚洲欧好州第一的日产suv| 日韩免费观看的一级毛片| 污污视频网站免费观看| 久久久久久久尹人综合网亚洲| 免费播放一区二区三区| 亚洲卡一卡二卡乱码新区| 亚洲AⅤ永久无码精品AA| 国内精品久久久久影院免费| 亚洲伊人久久大香线蕉| 国产男女性潮高清免费网站| 成人一区二区免费视频| 亚洲国产精品久久久久秋霞影院| 日韩在线免费看网站| a毛片全部免费播放| 亚洲 欧洲 日韩 综合在线| 中文字幕精品亚洲无线码一区| 亚洲黄色免费在线观看| 午夜亚洲国产精品福利| 久久水蜜桃亚洲av无码精品麻豆 |