2012-11-05 80 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