import java.util.*;
 class Houzhui{
   String in;
   String out;
   public boolean isP(char d){
   return (d=='+'||d=='-'||d=='*'||d=='/');
  }
  public boolean isS(char d){
       return (d==' ');
     }
  public void jisuan(){
        double a,b;
        Stack s = new Stack();
        char c;
        StringTokenizer par=new StringTokenizer(in,"+-*/",true);
        while(par.hasMoreTokens()){
        String token=par.nextToken();
        c=token.charAt(0);
        if(isP(c)&&(token.length()==1)){
            a=((Double)s.pop()).doubleValue();
            b=((Double)s.pop()).doubleValue();
            switch(c){
            case'+':s.push(new Double(a+b));break;
            case'-':s.push(new Double(a-b));break;
            case'*':s.push(new Double(a*b));break;
            case'/':s.push(new Double(a/b));break;
            default:break;
            }//end switch
       }//end if
        else if(isS(c)&&(token.length()==1)){
             ;
        }
        else s.push(Double.valueOf(token));
          
}   
          outPut("所求的值为"+s.pop());
     }   public String outPut(String s){
          return out=s;
   }
      public void setIn(String s){
       in=s;
}
      public String getOut(){
      return out;
}
 } 编译成功,运行时发生错误,请高手指点下错误在哪儿

解决方案 »

  1.   

    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;//结果
     //依据输入信息创建对象,将数值与操作符放入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!!!");
      }
     }
    }