Infix 符号在 Postfix 转换器中的错误

Mistake in Infix notation into Postfix converter

在编写应用程序时,我面临着需要执行输入的算术运算。词法分析器部分 returns 中缀表示法的算术表达式,而要执行进一步的操作,最好使用后缀(反向波兰语)表示法。通常,我需要一个堆栈,其中在操作符号之后紧接着是应该应用该操作的参数,可能是嵌套的。

我写了一个想到的最简单的翻译实现,但是出错了,就是找不到出处。

给出显式错误的输入示例:1+2*3-4/(5*6) 我的实施输出是:12+3*4-56*/ 正确的必须是:123*+456*/-

这是主要代码,它对源数据使用中缀 Stack,对答案使用后缀 StringBuilder

    for (int i = 0; i < element.length(); i++) {
        char st = element.charAt(i);

        if (!(st == ' ' || st == ',')) {
            if (st == '+' || st == '-' || st == '*' || st == '/') {
                while (!infix.isEmpty() && infix.peek() != '(' && operatorWeight(infix.peek()) >= operatorWeight(st)) {
                    postfix.append(infix.pop());
                }
                infix.push(st);
            } else if (st >= '0' && st <= '9') {
                postfix.append(st);
            } else if (st == '(') {
                infix.push(st);
            } else if (st == ')') {
                while (!infix.isEmpty() && infix.peek() != '(') {
                    postfix.append(infix.pop());
                }
                infix.pop();
            }
        }
    }
    while (!infix.isEmpty() && infix.peek() != '(') {
        postfix.append(infix.peek());
        infix.pop();
    }

这里有一个辅助函数,可以更轻松地比较运算符:

public int operatorWeight(char st) {
    int weight = -1;
    switch (st) {
        case '+':
        case '-':
            weight = 0;
        case '*':
        case '/':
            weight = 1;
    }
    return weight;
}

可能搞砸了条件

您在运算符比较开关块中缺少 break 语句。

public int operatorWeight(char st) {
    int weight = -1;
    switch (st) {
        case '+':
        case '-':
            weight = 0;
           break;
        case '*':
        case '/':
            weight = 1;
            break;
    }
    return weight;
}