2010-11-21 28 views
2

我最近編寫了一個java程序,它接受中綴表達式並將其轉換爲後綴表達式。它適用於大多數情況,但我的某些表達式出錯。例如,表達式a + b + c + d + e在輸出 a b + c + d + e +時將輸出abcde +++++。使用java在中綴中獲取錯誤的輸出到後綴應用程序

import java.util.Stack; 
public class ITP { 

    public static Stack<Character> stack; 
    public static String inFixExp; 
    public static String postFixExp = ""; 

    public static String infixToPostfix(String exp){ 
     ITP o = new ITP(); 
     stack = new Stack<Character>(); 
     inFixExp = exp; 

     for (int i = 0; i < inFixExp.length(); i++) { 

      if (inFixExp.charAt(i) == '(') 
       stack.push(inFixExp.charAt(i)); 
      else if (inFixExp.charAt(i)==')'){ 
       while (stack.peek()!='('){ 
        postFixExp += stack.pop();  
       } 
       stack.pop(); 
      }else if ((inFixExp.charAt(i)=='*')||(inFixExp.charAt(i)=='/')||(inFixExp.charAt(i)=='+')||(inFixExp.charAt(i)=='-')){ 
       while(!stack.isEmpty() && o.getPredence(inFixExp.charAt(i)) < o.getPredence(stack.peek())) 
        postFixExp += stack.pop(); 
       stack.push(inFixExp.charAt(i)); 
      }else 
       postFixExp += inFixExp.charAt(i); 

     } 
     while(!stack.isEmpty()) 
       postFixExp += stack.pop(); 



     return postFixExp; 
    } 

    public int getPredence(Object op) { 

     if((op.equals("*")) || (op.equals("/"))) 
      return 3; 
     else if((op.equals("+"))||(op.equals("-"))) 
      return 1; 
     else 
      return 0; 
    } 

} 

我發現,如果我改變<與< =在管線24將解決此問題,但然後我會得到一個空堆棧錯誤和一些其他表達式將輸出錯誤,如A + B *當它應該是abc * +時,它將輸出ab + c *。

回答

1

if ((inFixExp.charAt(i) == '*') || ... 

檢查charAt()但你getPredence(precedence?)檢查一個String,嘗試針對char,而不是比較。

+0

謝謝!這固定它完美 – Thomas 2010-11-21 22:04:50

+0

不客氣。就個人而言,我嘗試在方法簽名中不使用Object,因爲Object超類型可能導致用戶失去輸入的跟蹤。雖然在這種情況下這不是很相關。 – 2010-11-21 22:19:19