Infix to postfix in Java [closed]

1

Only separate operands in one stack and operators in another stack, but do not go the final step to postfix ... 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 
    
asked by J.Mu 11.10.2016 в 03:10
source

1 answer

2

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

The first thing we need to know is that the operators have associated priorities that are used for their administration, 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 keeping this in mind the algorithm comes next: I will try to explain it step by 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 ready. that serial algorithm, you just have to create in your code the logic to validate the priority of each operator.

    
answered by 11.10.2016 / 04:26
source