Получение неправильных выводов в infix для постфиксного приложения с Java - PullRequest
2 голосов
/ 22 ноября 2010

Я недавно написал java-программу, которая принимает инфиксное выражение и преобразует его в постфиксное выражение.Это работает по большей части, но я получаю неправильные выводы для некоторых выражений.Например, выражение a + b + c + d + e выведет abcde +++++, когда оно должно вывести ab + c + d + e +.

import java.util.Stack;
public class ITP {

    public static Stack<Character> stack;
    public static String inFixExp;
    public static String postFixExp = "";

    public static String infixToPostfix(String exp){
        ITP o = new ITP();
        stack = new Stack<Character>();
        inFixExp = exp;

        for (int i = 0; i < inFixExp.length(); i++) {

            if (inFixExp.charAt(i) == '(')
                stack.push(inFixExp.charAt(i));
            else if (inFixExp.charAt(i)==')'){
                while (stack.peek()!='('){
                    postFixExp += stack.pop();       
                }
                stack.pop();
            }else if ((inFixExp.charAt(i)=='*')||(inFixExp.charAt(i)=='/')||(inFixExp.charAt(i)=='+')||(inFixExp.charAt(i)=='-')){
                while(!stack.isEmpty() && o.getPredence(inFixExp.charAt(i)) < o.getPredence(stack.peek()))
                    postFixExp += stack.pop();
                stack.push(inFixExp.charAt(i));
            }else
                postFixExp += inFixExp.charAt(i);

        }
        while(!stack.isEmpty())
                postFixExp += stack.pop();



        return postFixExp;
    }

    public int getPredence(Object op) {

        if((op.equals("*")) || (op.equals("/")))
            return 3;
        else if((op.equals("+"))||(op.equals("-")))
            return 1;
        else
            return 0;
    }

}

Я обнаружил, что если я изменю <с <=в строке 24 это решит эту проблему, но затем я получу ошибку пустого стека, и некоторые другие выражения будут выводить неправильно, например, a + b * c, который будет выводить ab + c *, когда предполагается, что это abc * +.</p>

1 Ответ

1 голос
/ 22 ноября 2010

Ваш

if ((inFixExp.charAt(i) == '*') || ...

проверяет charAt(), но ваш getPredence(precedence?) проверяет String, попробуйте сравнить с char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...