Я пытаюсь изменить инфикс на постфикс в Java, в чем проблема? - PullRequest
0 голосов
/ 12 октября 2018

Я хочу преобразовать инфикс в постфикс со структурой данных стека.

В этом коде я не рассматривал случай * и /.


примераввод: 10 - (3 + 4) - 1

правильный вывод: 10 3 4 + - 1 -

но мой вывод: 10 3 4 + 1 - -


И это часть моего кода.Я проверил какую-то часть, которая мне показалась неправильной.оператор - это имя стека, который я сделал.

public String infix to (String infix) throws ArrayIndexOutOfBoundsException {
    int result=0;
    arr = infix.split(" ");

    String  element = "";
    String postfix="";
    for(int i=0; i<arr.length; i++) {
        element = arr[i];

        if(element.equals("+")||element.equals("-")) {
            operator.push(element);

        }

        else if(element.equals("(")) {
            operator.push(element);

        }
        else if(element.equals(")")) {

            //**As I think, this part might wrong**

            while((!operator.empty())||(!operator.peek().equals("("))){  
                postfix = postfix.concat(operator.pop());
                postfix = postfix.concat(" ");

                if(operator.peek().equals("(")) {
                    operator.pop(); 
                }
                break;
            }   

            }
        else if(isNum(element)){        
            postfix = postfix.concat(element);
            postfix = postfix.concat(" ");          
        }

    }
    while(!operator.empty()) {
        postfix = postfix.concat(operator.pop());
        postfix = postfix.concat(" ");
    }

    return postfix;
}


public static boolean isNum(String s) {
    try {
        Integer.parseInt(s);
        return true;
    }
    catch(NumberFormatException e) {
        return false;
    }
}

спасибо всем.

1 Ответ

0 голосов
/ 12 октября 2018

Измените это (!operator.empty())||(!operator.peek().equals("(")) на (!operator.empty()) && (!operator.peek().equals("("))

while((!operator.empty()) && (!operator.peek().equals("("))){  
                postfix = postfix.concat(operator.pop());
                postfix = postfix.concat(" ");

                if( (!operator.empty()) && (!operator.peek().equals("("))) {
                    break; //invalid
                else
                   operator.pop(); 
                }

            }    
...