中缀到Postfix Java算法问题

时间:2015-10-15 01:09:26

标签: java algorithm notation infix-notation

因此我被分配创建一个方法,该方法以中缀表示法作为参数接收字符串,并以后缀表示法返回字符串。

我的代码似乎适用于我抛出的大多数示例,但是一些输入会导致错误的结果。

public class Operations<T> {

public int value(char c){
    switch(c){
    case '(':
    case ')':
        return 3;
    case '*':
    case '/':
    case '%':
        return 2;
    case '+':
    case '-':
        return 1;
    default:
        return 0;   
    }
}

public String infixToPostfix(String infix){

    //Operator stack
    myStack<Character> ops = new myStack<Character>();

    //Postfix string
    String postfix = "";

    //Current char being read
    char c;

    //Marks if paranthesis are being passed in
    boolean flag = false;

    //Iterate through each character to find operators
    for(int i=0; i<infix.length(); i++){
        c = infix.charAt(i);

        //Add operand to postfix and operator to stack
        if(value(c)==0){
            postfix+=c;
        } else if(ops.isEmpty() || (value(c)>value(ops.getTop()) && c!=')') || c=='(') {
            ops.push(c);
        } else if(value(c)<value(ops.getTop()) && c!=')') {
            if(ops.getTop()=='(' || flag) {
                ops.push(c);
                flag = true;
            } else {
                postfix+=ops.pop();
                while(!ops.isEmpty() && value(c)<value(ops.getTop())) {
                    postfix+=ops.pop();
                }
                ops.push(c);
            }
        } else if(c==')') { 
            while(ops.getTop()!='('){
                postfix+=ops.pop();
            }
            ops.pop();
            flag = false;
        } else {
            postfix+=ops.pop();
            ops.push(c);
        }
    }
    while(!ops.isEmpty()){
        postfix+=ops.pop();
    }       

    return postfix;
}

}

例如,等式: - A * B +(C / D * 7) - ((A%C-8)/(H + F-D))

输出:

  

AB CD / 7 + AC8-%HF + d - / -

正确答案是:

  

AB CD / 7 + AC%8-HF + d - /

导致问题的原因是什么?感谢

0 个答案:

没有答案