2016-03-05 163 views
0

我正在編寫一個代碼,將中綴轉換爲後綴以進行hw分配 我已經調試過它,但似乎無法解決爲什麼當它彈出堆棧時它返回「(」而不是「+」爲什麼堆棧彈出(而不是+

StackInterface<Character> stack = new ArrayStack<Character>(); 
     String postfix = ""; 
     int length = infxEx.length(); 
     for(int i =0; i != length; ++i){ 

      char oneChar =infxEx.charAt(i); 
     if(oneChar == '('){ 
      stack.push(oneChar); 
      }else 
     if(oneChar == '*' || oneChar == '/'|| oneChar == '%'|| oneChar == '+' || oneChar == '-'){ 
      stack.push(oneChar); 
     //error checking input is int 
     } 
     else if(oneChar == ')'){ 
      while (stack.pop() != '(' && !stack.empty()){ 

      char popoff = stack.pop(); 
      postfix = postfix + popoff; 
     } 
     } 

謝謝!

+1

添加允許我們重現問題的輸入會很好。 – fabian

+0

該算法不正確。它不處理運算符優先級。您需要查看Dijkstra調車碼算法。 – EJP

回答

0

在你的循環處理達到),你從檢查(先在while條件堆棧的每個元素彈出兩次檢查stack.pop() != '(',並再次在循環體內抓取popoff,所以你會失去大約一半的字符;因爲這是三在主循環中達到),並且由於您忽略了不是操作員的任何內容(因此您的堆棧(a + b)將包含(+,並且您將在檢查(時去掉+,這意味着您將添加(添加到while循環體內的後綴中,並在堆棧爲空時終止循環。

使用查看操作看堆棧的頂部,而無需在while循環實際上刪除值來解決這個問題,如果你接受比經營其他標記在你的綴表達式,你將需要一個else條款以處理這種情況也。