Infix to Postfix in Java [closed]

closed . this question needs details or clarification . He's not getting answers right now.

want to improve this question? Add details and clarify the problem by editing this post .

Closed 4 years ago .

Improve this question

Just separate operands in one stack and operators in another stack, but don't be the final step to posfija... help.

public boolean lectura(){
    a=JOptionPane.showInputDialog("Digite la expresion");
    for(int i=0;i<a.length();i++){

        char n=a.charAt(i);   


        if(n=='+' || n=='-' || n=='*' || n=='/' || n=='^' || n=='(' || n==')'){
             pila2.push(n);
        JOptionPane.showMessageDialog(null, " "+pila2+"\n"
                + "Tope = "+pila2.size()+"\n Pila 2");
        }else{
             pila1.push(a.charAt(i));

        JOptionPane.showMessageDialog(null, " "+pila1+"\n"
                + "Tope = "+pila1.size()+"\n Pila 1");
         }

        pila3.push(n);

    }
    return true;
}//FIN DEL METODO LECTURA 
 1
Author: Juan Pinzón, 2016-10-11

1 answers

The problem is is that you are doing wrong the inclusion of the elements in the expression. you are including the operators indiscriminately in the stacks, when there are conditions:

The first thing we need to know is that the operators have associated priorities that are used for their management, basically this is the priority of the operators:

Operador     | Prioridad dentro de la pila | prioridad fuera de la pila
^ (potencia) | 3                           | 4
*,/          | 2                           | 2
+,-          | 1                           | 1
(            | 0                           | 5

Now taking this into account the algorithm comes the following: I will try to explain it step by step step.

 1. mientras queden elementos en la expresión infija leer elemento y 
 hacer del paso 2 al 4:

 2.si elemento es un operando va directo a la expresión.
 3.si no, (el elemento es un caracter) entonces:
       3.1 si la pila de ayuda está vacía almaceno el caracter y  
       vuelvo a (1)

       3.2 si la pila no está vacía entonces
       (aquí hay dos opciones)

            3.2.1 si la prioridad del operador es mayor que la prioridad
                  del elemento en la sima de la pila, se almacena en la 
                  la pila y se vuelve a (1)

            3.2.1 si la prioridad es menor entonces saco el elemento de 
                  la pila y lo envío a la expresión, y almaceno en la pila
                  el carácter leído.

 4. si es paréntesis derecho (observar que el derecho no se encuentra en 
    los operadores ) entonces:

     4.1 saco elementos de la pila de operadores hasta encontrar el 
     paréntesis izquierdo, y todos los elementos extraídos van a la 
     expresión potsfija en el orden que fueron obtenidos.

     4.2 continuar a partir de 1.

 5. en este punto ya no hay mas elementos en la expresión infija.

 6. si quedan operadores en la pila sacar todos e incluirlos en la    
 expresión potsfija.

And that's it. that serial the algorithm, you just have to create in your code the logic to validate the priority of each operator.

 2
Author: Gytree, 2016-10-12 11:44:33