后缀符号括号问题的中缀

问题描述

所以我目前正在做一个将中缀转换为后缀表示法的项目,我几乎完成了这个项目。它正确地将中缀转换为后缀,直到我尝试添加括号它最终格式不正确。

static int precedence(String c){
        switch(c){
            case"+":
            case"-":
                return 1;
            case"*":
            case"/":
                return 2;
            default:
                return -1;
        }
    }

我相信下一部分代码很好,因为没有括号,一切都可以正常工作。

// Precondition: every operator/operand will be separated by at least one space
    public static String ConvertToPostfix(String infix) throws InvalidInfixEquationException
    {


        String[] tokens = infix.split("");
        String result= " ";

        Stack<String> stack= new Stack<>();


        for(int i = 0; i<tokens.length; i++){
            String current = tokens[i];

            if(precedence(current)>0){

                while(!stack.isEmpty() && precedence(stack.peek())>= precedence(current)){
                    result += stack.pop() + " ";
                }
                stack.push(current);
            } else if(!stack.isEmpty()&& precedence(stack.peek())<= precedence(current)){
                result += stack.pop() + " ";
            }

我相信我遇到的问题是我的代码的下一部分涉及操作括号。

else if(current== ")"){
                String s = stack.pop();
                while(s !="("){
                    result += s;
                    s= stack.pop();
                }
            } else if(current == "("){
                stack.push(current);
            }
            else {
                result += current + " ";
            }
        }

       for(int i=0;i <= stack.size(); i++){
           result+= stack.pop() + " ";
        }

    return result;

    }

这是我的主要方法,我已经包含了一个示例输出。 导入 java.util.Stack; 公共类 RPncalc {

    public static void main( String[] args) throws InvalidInfixEquationException,InvalidPostfixEquationException {
    String result= "(3+4)/3*2"; // output 3 4 + 3 / 2 *

    System.out.println(ConvertToPostfix(result));

这是我得到的输出

 ( 3 4 ) 3 / 2 * + 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)