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

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

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

    cavenaghi

    BlogJava 首頁(yè) 新隨筆 聯(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();//存儲(chǔ)中序表達(dá)式
     private ArrayList right=new ArrayList();//存儲(chǔ)右序表達(dá)式
     private String result;//結(jié)果
     //依據(jù)輸入信息創(chuàng)建對(duì)象,將數(shù)值與操作符放入ArrayList中
     private Expression(String input){
      StringTokenizer st=new StringTokenizer(input,"+-*/()",true);
      while(st.hasMoreElements()){
       expression.add(st.nextToken());
      }
     }
     //將中序表達(dá)式轉(zhuǎn)換為右序表達(dá)式
     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);
      }
     }
     //對(duì)右序表達(dá)式進(jìn)行求值
     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 閱讀(1007) 評(píng)論(1)  編輯  收藏

    Feedback

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲中文字幕久久精品无码喷水| 131美女爱做免费毛片| 日韩一区二区在线免费观看| 亚洲一级毛片视频| 黄页网站在线看免费| 亚洲第一成年人网站| 免费精品国产自产拍在线观看图片| 久久亚洲精品人成综合网| 免费无码成人AV在线播放不卡 | 免费国产高清视频| 看亚洲a级一级毛片| 亚洲成年看片在线观看| 人妖系列免费网站观看| 国产成人亚洲综合无码精品| 免费无码毛片一区二区APP| 亚洲制服丝袜精品久久| 日韩免费一区二区三区| 一边摸一边桶一边脱免费视频| 亚洲午夜爱爱香蕉片| 日韩免费无码视频一区二区三区| 亚洲酒色1314狠狠做| AV片在线观看免费| 一级毛片免费视频网站| 久久亚洲精品人成综合网| 在线观看无码的免费网站| 产传媒61国产免费| 久久久亚洲欧洲日产国码二区 | 亚洲人成7777影视在线观看| 无码日韩精品一区二区免费| 国产精品亚洲天堂| 亚洲国产精品嫩草影院在线观看| 免费观看无遮挡www的视频| 国产精品亚洲专区无码不卡| 国产精品亚洲片在线观看不卡 | 国产男女爽爽爽爽爽免费视频| 亚洲日韩一区二区一无码| 中文国产成人精品久久亚洲精品AⅤ无码精品| 三年片免费高清版| 亚洲人成图片网站| 在线A亚洲老鸭窝天堂| 成年女人18级毛片毛片免费 |