如何确定运算符的优先级

时间:2019-03-08 21:48:23

标签: java calculator

我正在用+-* /和%(模数)创建一个计算器。基本计算器正在运行,但是我现在想知道在加法和减法之前应如何确定乘法和除法的优先级。真的无法弄清楚。

我需要写一个完整的字符串,该字符串将转换为双精度,然后返回到字符串以进行打印。

示例:3 + 3-4 * 8 + 5/6 + 5

这是我的下面的代码

public String calculateExpression(String expression){
    double dres = 0.0;
    String[] split = expression.split("(?=[*/+-])|(?<=[*/+-])");
    dres = Double.parseDouble(split[0]);
    for (int i = 1; i < split.length; i+= 2) {
        String op = split[i];
        double val = Double.parseDouble(split[i+1]);
        switch (op) {
        case "+":
                dres = Addition(dres, val);
            break;
        case "-":
                dres = Subtraction(dres, val);
            break;
        case "*":
                dres = Multiplication(dres, val);
            break;
        case "/":
                dres = Division(dres, val);
            break;
        default:
            break;
        }
    }
    String res = Double.toString(dres);
    return res;
}

public double Addition(double d1,double d2) {
    return d1+d2;

}

public double Subtraction(double d1, double d2) {
    return d1-d2;
}

public double Multiplication(double d1, double d2) {
    return d1*d2;
}

public double Division(double d1, double d2) {
    return d1/d2;
}

public double Modulus(double d1, double d2) {
    return d1%d2;
}

3 个答案:

答案 0 :(得分:0)

您可以做的是扫描最右边*或/的位置,然后将String分成两部分(在符号的左侧和符号的右侧)。然后,调用您自己的方法来确定任一侧的值;然后执行乘法/除法运算。

如果没有*或/,则可以对+和-执行相同的操作。

如果根本没有运算符,那么只需返回数字即可。

答案 1 :(得分:0)

也许可以尝试类似蛮力的方法:

PeriodType.years()

不确定代码是否正确,但要领。

答案 2 :(得分:0)

这是Interpreter Pattern的经典应用。

不幸的是,我很难理解维基百科上的例子到底在做什么……

但是解决方案肯定与堆栈(在Java中称为ArrayDeque)有关。