Оператор изменился на int во время преобразования из инфикса в постфикс - PullRequest
0 голосов
/ 20 марта 2020
private DSAQueue parseInfixToPostfix(String equation) {
        String result = "";
        char operator = ' ';
        DSAStack stack = new DSAStack();
        DSAQueue queue = new DSACircular();

        for (int i = 0; i < equation.length(); i++) {
            char c = equation.charAt(i);

            if (Character.isLetterOrDigit(c)) {
                result += c;
            }

            else if (c == '(') {
                stack.push(c);
            }

            else if (c == ')') {
                while (!stack.isEmpty() && stack.top() != '(') {
                    result += stack.pop();
                }

                if (!stack.isEmpty() && stack.top() != '(') {
                    result = "Invalid expression";
                }

                else {
                    stack.pop();
                }
            }

            else { //when meets operator
                while (!stack.isEmpty() && (precedenceOf(c) <= precedenceOf((char) stack.top()))) {
                    if (stack.top() == '(') {
                        result = "Invalid expression";
                    }
                    result += stack.pop();
                }
                stack.push(c);
            }
        }

        while (!stack.isEmpty()) {
            if (stack.top() == '(') {
                result = "Invalid";
            }
            result += stack.pop();
        }
        queue.enqueue(result);
        return queue;
    }

Выше приведен мой код для преобразования инфикса в постфикс. В качестве примера я использовал «4 + 2» и получил:

Pushed: 43
Popped: 43
Enqueued: 4243

Я не знаю, почему он автоматически преобразовал «+» в 43, но я хочу сохранить оператор как оператор как » + "в очереди. Является ли это возможным? Или есть ошибка? потому что я не могу узнать в чем ошибка. спасибо

...