2010-11-21 12 views
2

最近、中置式を取り、それを後置式に変換するJavaプログラムを作成しました。それはほとんどの部分で動作しますが、私はいくつかの式に間違った出力を得ています。たとえば、式a + b + c + d + eは、abcde +++++を出力するときに、 a b + c + d + e +を出力します。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に<と< = + B * abc * +となるはずのab + c *を出力する。

答えて

1

あなた

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

チェックcharAt()しかしStringのためのあなたのgetPredence(precedence?)チェックし、代わりにcharと比較するしてみてください。

+0

ありがとうございました!これは完全に固定 – Thomas

+0

あなたは大歓迎です。個人的には、メソッドのシグネチャでObjectを使用しないようにします。なぜなら、オブジェクトのスーパータイプはユーザーに入力の痕跡を失う可能性があるからです。この場合、これはあまり関係ありません。 –

関連する問題