2016-03-03 69 views
0

我有一個hw任務,要求將中綴表達式轉換爲後綴表達式。將字符推入堆棧是否會改變它來自的字符串?

編輯: 什麼是假設發生: 輸入:(5)輸出:5;輸入:(1 + 1)輸出:11+;輸入=((9/3)-2) 輸出= 93/2 與此代碼會發生什麼:輸入:(5)(代碼保持運行)

我已經調試它,這個問題似乎我第二次循環。它只是保持循環,我不確定爲什麼。我以爲推子到堆棧更新循環,改變從字符串(5)5)

// data fields 
    StackInterface<String> stack = new ArrayStack<String>(); 
    String output = ""; 
    int first = 0; 
    int second = 1; 
    String oneChar = infixExpression.substring(first,second); 

    //while 
    while (infixExpression.length()>0){ 
    while(oneChar.equals("(")){ 
     stack.push(oneChar); 
     first ++; 
     second ++; 
     } 
     //if char is), pop off stack while char is not (
     //add to string operators, add to output 
     while(oneChar.equals(")")){ 
     while (oneChar != "(" && stack.empty() == false){ 
     String popOperator = stack.pop(); 
      output = output + popOperator; 

     //moves to next char of String 
      first ++; 
      second ++; 

     }//end of while loop 

     } 
     while((oneChar == "*") || (oneChar == "/") || (oneChar == "%") || (oneChar == "+") ||(oneChar == "-")){ 

      stack.push(oneChar); 

     //moves to next char of String 
      first ++; 
      second ++; 
      } 
     //error checking input is int 
     try{ 

      Integer.parseInt(oneChar); 
      output = output + oneChar; 

      //moves to next char of String 
      first ++; 
      second ++; 
     } catch (InputMismatchException e){ 
      System.out.print("Not a valid expression"); 
      } 
     }//end of while loop 
    System.out.print("Postfix Expression: " + output); 

}

+0

你說你不認爲你做得對。如果您向我們提供了幾個您正在爲此代碼提供的表達式來測試它的示例,那麼您的代碼是什麼與您期望它執行的操作有什麼關係。參見[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)。 –

回答

0

是否推字符到堆棧改變它來自字符串?

不需要重複......「字符串是不可改變的,它們不能改變。」


看看你的代碼,算法級別似乎存在一些主要問題。提示:您不應該需要四深度嵌套循環來處理括號。在最高級別的循環中,您應該使用如下邏輯:

if operand then do something, 
else if operator then do something, 
else if '(' then do something, 
else if ')' then do something, 
else error. 
+0

我認爲你需要向後退一步,並試着理解你正試圖實現的算法。從鉛筆和紙開始,「手工」。一旦你清楚地理解了算法,那麼你可以嘗試用Java編寫它。但顯然,你不能更新字符串的值,因爲字符串不能被改變。 –