2015-11-17 34 views
-1

大家好我在這裏有一箇中綴後綴轉換器。 它轉換中綴postifx轉換器

4 - 9 * 11 + 155 * (21 - 17)/ 3 

4 9 11 155 21 17 3 - * + * - 

所以這是非常接近。對於較短的表達式, 正確。有什麼想法嗎?

public class ExpressionTools { 
    static MyStack<String> operatorStack=new MyStack<String>(); 
    public static String infixToPostfix(String infix)throws Exception{ 
    Scanner tokenizer = new Scanner (infix); 
     System.out.println("hi"); 
     String postFixExpression=""; 
     while (tokenizer.hasNext()){ 

      String temp=tokenizer.next(); 
      if(temp.charAt(0)>=48&&temp.charAt(0)<=57){ 
       for(int i=0; i<temp.length(); i++){ 
        if(!Character.isDigit(temp.charAt(i))){ 
         throw new PostFixException("Invalid expression"+temp); 
       } 
       } 
       postFixExpression+=temp+" "; 
      } 

      else if(temp.equals('(')){ 
       operatorStack.push(temp); 
      } 
      else if(temp.equals("*")||temp.equals("+")||temp.equals("-")||temp.equals("/")){ 
       if(!operatorStack.isEmpty()){ 
        while(operatorStack.isEmpty()&&operatorStack.peek().equals("*")||operatorStack.isEmpty()&&operatorStack.peek().equals("/")){ 
         postFixExpression+=operatorStack.pop()+" "; 

        } 
       } 
       operatorStack.push(temp); 
      } 
      else if(temp.equals(")")){ 
       while(!operatorStack.isEmpty()){ 
        if(!operatorStack.peek().equals("(")){ 
         postFixExpression+=operatorStack.pop()+" "; 
        } 
        else{ 
         operatorStack.pop(); 
         break; 
        } 

       } 
      } 
      System.out.println(postFixExpression); 
     } 


      while(!operatorStack.isEmpty()){ 
       postFixExpression+=operatorStack.pop()+" "; 
      } 



    System.out.println("final postfix"); 
    System.out.println(postFixExpression); 
    return postFixExpression; 
} 
+0

您是否在調試器中檢查了這段代碼? –

回答

0

這裏有幾個問題。

  1. operatorStack.isEmpty()&&operatorStack.peek().equals("*")永遠不會是真的。

  2. operatorStack.isEmpty()&&operatorStack.peek().equals("/")永遠不會是真的。

  3. else if(temp.equals('(')){應該是else if(temp.equals("(")){

  4. 您的分詞器不會將)/分開。您需要在)之後添加空格,否則使用更好的標記器。

+0

非常感謝 – drt