evaluacion postfija

Iniciado por BTO911, 23 Octubre 2013, 23:04 PM

0 Miembros y 1 Visitante están viendo este tema.

BTO911

hola a todos se que es algo facil  :-X pero no consigo sacarlo  :-\ espero y me puedan ayudar mi codigo
para evaluar una expresion en postfijo

Código (java) [Seleccionar]

public static void main(String arg[]){
String expres = "362*4/+";  //Resultado debe ser 6
        System.out.println("Evaluacion de una expresion en posfijo");
        System.out.println("\n Exp posfija:"+expres+"\n");
        //convertir array expresion
        char[]expresiion = expre.toCharArray();
        //Pila de salida y pila de entrada
        char simboloEntrada,op1,op2,valor=0;
        MyFirstStack pilita = new MyFirstStack(expresiion.length);
       
       
       
        for(int a=0;a<expresiion.length;a++){
            simboloEntrada = expre.charAt(a);
            if(simboloEntrada != '+' && simboloEntrada != '-' && simboloEntrada != '*' && simboloEntrada != '/'){
                pilita.push(simboloEntrada);
            }
            else {
               
                op1= pilita.pop();
                op2= pilita.pop();
                valor=(char)evaluate(simboloEntrada,op1,op2);
               
                pilita.push(valor);
            }
        }
       
       
        System.out.print("El valor:"+valor);

    }
static int evaluate (char cad, char a, char b ){
   
    int op1=a-48;
    int op2=b-48;
   
    if(cad== '-')
        return op1-op2;

    if(cad== '+')
        return op1+op2;

    if(cad== '/')
        return op1/op2;

    if(cad== '*')
        return op1*op2;

       
    return 0;
    }
}


Muchas gracias.

egyware

¿Intentaste intercambiar el orden de las instrucciones?

Código (java) [Seleccionar]

op1 = pilita.pop();
op2 = pilita.pop();


Creo que por ahí anda el error.

Suponte tu que tienes esto en tu pila.
12/4
[12][4][/]

Luego haces
operator = pop() devuelve el '/'
op1 = pop() devuelve '4'
op2 = pop() devuelve '12'

Finalmente
resultado = op1 / op2 ( osea 4 / 12)


Saludos!