让睡床正常工作

getting bedmas to work correctly

当我输入类似 3(5) 的内容时,我的代码失败了。 如何修改我的代码,使其在中间求解表达式然后相乘?

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(')');

这就是您需要在 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 方法是正确的,因为它在您的代码中不完整)