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 *。
謝謝!這固定它完美 – Thomas 2010-11-21 22:04:50
不客氣。就個人而言,我嘗試在方法簽名中不使用Object,因爲Object超類型可能導致用戶失去輸入的跟蹤。雖然在這種情況下這不是很相關。 – 2010-11-21 22:19:19