Converção de Infixa para Posfixa!

0 respostas
brunoejaera

Estou fazendo um trabalho para a faculdade, achei alguns exemplo na net e até aqui msmo...mas optei por utilizar um código que eu vi...enfim, estou tento algumas dificuldade pra fazer esse trabalho...vou postar o código que fica bem mais facil.... A emoção foi tanta pra postar a dúvida que até errei pra escrever o nome do tópico... ¬¬

import java.util.Stack;

public class InfixaParaPosfixa {
    
    public int obterPrioridade(char caracter){
        int retorno = 0;
        String prioridade1 = "+-";
        String prioridade2 = "*/";
        if('(' == caracter)
            retorno = 1;
        else if(prioridade1.indexOf(caracter) >= 0)
            retorno = 2; 
        else if(prioridade2.indexOf(caracter) >= 0)
            retorno = 3;
        else if ('^' == caracter)
            retorno = 4;
        return retorno;
    }
    public  boolean eOperando(char caracter){
        String letras = "ABCDEFGHIJKLMNOPQRSTUVXZ";
        return (letras.indexOf(Character.toUpperCase(caracter)) >= 0);
    }
    public boolean eOperador(char caracter){
        String operadores = "+-*/^";
        return (operadores.indexOf(caracter) >= 0);
    }
    public String converterParaPosfixa(String expressao){
        Stack pilha = new Stack();
        String resultado = null;
        char caracter;
        int prioridade = 0;
        
        for(int i = 0; i < expressao.length(); i++){
            caracter = expressao.charAt(i);
            if(eOperando(caracter))
                resultado += caracter;
            else if(eOperador(caracter)){
                prioridade = obterPrioridade(caracter);

                 // o método .peek retorna um object, porém o método que eu criei obterPrioridade aceita char no parametro...
                 //como dizer que o objeto retornado é char, tentei casting mas não deu certo.
                while((!pilha.isEmpty()) && (obterPrioridade (pilha.peek())) >= prioridade))
                    resultado += pilha.pop();
                pilha.push(caracter);
            }
            else if('(' == caracter)
                pilha.push(caracter);
            else if(')' == caracter){
                String item = pilha.pop().toString();
                while(!item.equals('(')){
                    resultado += item;
                    item = pilha.pop().toString();
                }
            }
        }
        while(!pilha.isEmpty())
            resultado += pilha.pop().toString();
        return resultado;    
    }
}

Se possível teria como vcs darem uma olhada para ver se está faltando algo, ou tem alguma errada ou em excesso ???

Vlw desde já.

Criado 29 de outubro de 2011
Respostas 0
Participantes 1