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á.