Pessoal digito essa expressão quando vou testar:
(-10+3*7-11)+5^3-375/3
e tem que dar Zero, só que no meu programa dá erro de valores inválidos, aguém sabe porque?
Main:
public class Teste {
public static void main(String[] args) throws Exception {
BufferedReader leitor = new BufferedReader(new InputStreamReader(System.in));
Expressao analisa = null;
/**
* For para sempre
* ReplaceAll faz a substituição do primeiro conteúdo original para o segundo conteúdo
*/
for(;;)
try {
System.out.println("Por favor digite uma expressão: ");
analisa = new Expressao(leitor.readLine().replaceAll(" ", ""));
analisa.verifiqueToken();
analisa.resolveExpressao();
System.out.println("O resultado final da expressão que você digitou é:");
analisa.exibePilha();
break;
}
catch (IOException error) { //Não irá ocorrer
}
catch(NumberFormatException nerror){
System.err.println("Expressão possui valores inválidos, por favor digite uma expressão correta");
}
catch(NullPointerException nullerror){
System.err.println("Expressão possui valores inválidos, por favor digite uma expressão correta");
}
catch(Exception e){
System.err.println(e.getMessage());
}
}
}
método resolveExpressao:
public void resolveExpressao() throws Exception {
double nroConvertido;
String operando;
String resultado;
double prinumero, segnumero;
while (this.pilha.topo() != null){
this.fila.enfilere(this.pilha.topo());
this.pilha.desempilhe();
}
while (this.fila.primeiro() != null) {
try {
nroConvertido = Double.parseDouble(this.fila.primeiro());
this.pilha.empilhe(this.fila.primeiro());
this.fila.desenfilere(this.fila.primeiro());
}
catch (Exception e) {
operando = this.fila.primeiro();
this.fila.desenfilere(this.fila.primeiro());
segnumero = Double.parseDouble(this.pilha.topo());
this.pilha.desempilhe();
prinumero = Double.parseDouble(this.pilha.topo());
this.pilha.desempilhe();
resultado = calculaExpr(prinumero, segnumero, operando) + "";
this.pilha.empilhe(resultado);
}
}
}
Por favor me ajudem a fazer essa expressão dar certo.