2012-11-05 61 views
1

我知道这里有类似的问题,但我找不到解决我遇到的问题的问题。我试图制定一种方法,将中缀表示法转换为后缀表示法,同时实现运算符的优先级以获得正确的输出。 我已经用通常的方法(push,pop,peek等)创建了自己的堆栈类,并且它工作得非常好。我的问题是,对于更复杂的表达式,如A-(B + C^D^C)/ D * B,我得到了错误的输出。转换的结果应该是ABCDC ^^ + d/B * - 而我不断获取ABCDC ^^ + d/-B使用堆栈和操作符的优先级插入到Postfix

这里是我的方法:

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

我不认为我可以理解此代码没有方法,如priorityAtStack,并且该错误可能是其中一种方法。构建一个包含完整可运行程序的文件并将其放置在某处可能是一个好主意。 –

回答

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; 
} 
+0

问题是? – EJP