我知道在SO上已经有类似的问题,但我找不到解决我遇到的问题的问题。我正在尝试创建一个方法,将中缀符号表达式转换为后缀表示法,同时实现运算符的优先级以获得正确的输出。 我用通常的方法(push,pop,peek等)制作了我自己的堆栈类,它的工作非常好。我的问题是,对于更复杂的表达式,如A-(B + C ^ D ^ C)/ D * B,我得到错误的输出。转换的结果应该是ABCDC ^^ + D / B * - 而我继续获得ABCDC ^^ + D / -B
这是我的方法:
public static String infixToPostfix(char[] expressionArray, CharStack opStack){
String output = "";
int length = expressionArray.length;
for(int i = 0; i < length; i++){
if(isOperatorOrBracket(expressionArray[i])){
if(priorityAtInput(expressionArray[i]) >= priorityAtStack(opStack.peek())){
opStack.push(expressionArray[i]);
}else if(priorityAtInput(expressionArray[i]) == priorityAtStack(opStack.peek())){
output = output + expressionArray[i];
}else{
while(opStack.peek() != '('){
output = output + opStack.pop();
}
opStack.pop();
}
}else{
output = output + expressionArray[i];
}
}
while(!opStack.empty()){
if(opStack.peek() != '('){
output = output + opStack.pop();
}else if(opStack.peek() == '('){
opStack.pop();
}
}
return output;
}
如果您需要任何组件方法,请告诉我。任何帮助非常感谢!
答案 0 :(得分:0)
经过一个小时的盯着屏幕后,我发现了问题。非常感谢eclipse中的调试器!
public static String infixToPostfix(char[] expressionArray, CharStack opStack){
String output = "";
int length = expressionArray.length;
for(int i = 0; i < length; i++){
if(isOperatorOrBracket(expressionArray[i])){
if(priorityAtInput(expressionArray[i]) >= priorityAtStack(opStack.peek())){
opStack.push(expressionArray[i]);
}else if(priorityAtInput(expressionArray[i]) < priorityAtStack(opStack.peek())){
while(priorityAtInput(expressionArray[i]) < priorityAtStack(opStack.peek())){
output = output + opStack.pop();
if(opStack.peek() == '('){
opStack.pop();
break;
}else if(priorityAtInput(expressionArray[i]) >= priorityAtStack(opStack.peek())){
opStack.push(expressionArray[i]);
break;
}
}
}else{
while(opStack.peek() != '('){
output = output + opStack.pop();
}
opStack.pop();
}
}else{
output = output + expressionArray[i];
}
}
while(!opStack.empty()){
if(opStack.peek() != '('){
output = output + opStack.pop();
}else if(opStack.peek() == '('){
opStack.pop();
}
}
return output;
}