2017-06-03 91 views
0

當我輸入類似3(5)的東西時,我的代碼失敗。 如何修改我的代碼,以便它在中間表達式中解決然後相乘?讓bedmas正常工作

double parseTerm() { 
    double x = parseFactor(); 
    while(true) { 
     if  (shift('*')){ 
      x *= parseFactor(); // multiply 
     } 
     else if (shift('/')){ 
      x /= parseFactor(); // divide 
     } 
     else{ 
      return x; 
     } 
    } 
} 

double parseExpression() { 
    double x = parseTerm(); 
    while(true) { 
     if  (shift('+')){ 
      x += parseTerm(); // addition 
     } 
     else if (shift('-')){ 
      x -= parseTerm(); // subtraction 
     } 
     else{ 
      return x; 
     } 
    } 
} 

double parseFactor() { 
    if (shift('+')){ 
     return parseFactor(); //plus 
    } 
    if (shift('-')){ 
     return -parseFactor(); //minus 
    } 

    double x; 
    int startPos = this.pos; 

    if (shift('(')) { // brackets 
     x = parseExpression(); 
     shift(')'); 
+5

這是爲什麼用Java和JavaScript標記的? – Logan

+2

對於所有那些想知道的人:[BEDMAS,支持括號,指數,除法,乘法,加法,減法](https://en.wikipedia.org/wiki/Order_of_operations)=操作順序 –

+1

請發佈[mcve] - 一個既*最小*和**完整** - 上面的代碼不完整,我不認爲它是最小的。然後做出自己的嘗試 - 如果它不起作用,請詳細說明您嘗試了什麼以及出了什麼問題。作爲一個提示 - 如果你想要一個左括號('作爲一個事實上的乘法運算符,那麼你需要在'parseTerm'方法中使用類似'parseFactor'方法的子表達式。 –

回答

0

這是你需要什麼parseTerm更改爲得到這樣3(5)工作一樣3*(5)的表達式:

double parseTerm() { 
    double x = parseFactor(); 
    while(true) { 
     if (shift('*')) { 
      x *= parseFactor(); // multiply 
     } else if (shift('/')) { 
      x /= parseFactor(); // divide 
     } else if (shift('(')) { // brackets 
      x *= parseExpression(); 
      shift(')'); 
     } else { 
      return x; 
     } 
    } 
} 

(這是假設你的parseFactor方法是正確的,因爲它是在你的代碼中不完整)

+0

是的,parseFactor是正確的。無法全部粘貼。謝謝,你的解決方案工作。 – byzht