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 *を出力する。
ありがとうございました!これは完全に固定 – Thomas
あなたは大歓迎です。個人的には、メソッドのシグネチャでObjectを使用しないようにします。なぜなら、オブジェクトのスーパータイプはユーザーに入力の痕跡を失う可能性があるからです。この場合、これはあまり関係ありません。 –