java - 使用java在中缀到后缀应用程序中获取错误输出

标签 java infix-notation stack postfix-notation

我最近编写了一个 java 程序,它采用中缀表达式并将其转换为后缀表达式。它在大多数情况下都有效,但我在某些表达式中得到了错误的输出。例如表达式 a+b+c+d+e 在应该输出时会输出 abcde+++++ a b + 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*+ 时。

最佳答案

你的

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

检查 charAt() 但您的 getPredence(precedence?) 检查 String,尝试与 char 进行比较code> 代替。

关于java - 使用java在中缀到后缀应用程序中获取错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240595/

相关文章:

java - 尝试在 Java ME 中播放音乐,但出现异常 "Incompatible Types"

java - 如何找到两个优先队列之间的联合?

java - javafx 中的低级绑定(bind)(使用 computeValue)

java - 在字符串中每一个或两个字符后插入空格

java - 后缀到中缀

function - 使用二叉树对整数上的中缀算术表达式进行编码

C - '=' 标记之前的预期表达式...在没有 '=' 的情况下在线

performance - 堆栈是否在缓存中?

c++ - 栈分配失败,堆分配成功!!可能吗?

java - 如何在 IntelliJ IDEA 中启动新的 GUI 表单?