我最近编写了一个 java 程序,它采用中缀表达式并将其转换为后缀表达式。它在大多数情况下都有效,但我在某些表达式中得到了错误的输出。例如表达式 a+b+c+d+e 在应该输出时会输出 abcde+++++ a b + c + d + e +。
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*c 将输出ab+c*,当它应该是 abc*+ 时。
最佳答案
你的
if ((inFixExp.charAt(i) == '*') || ...
检查 charAt()
但您的 getPredence(precedence?)
检查 String
,尝试与 char
进行比较code> 代替。
关于java - 使用java在中缀到后缀应用程序中获取错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240595/