Numero negativo da erro

3 respostas
java
F

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 Main {

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 {

@SuppressWarnings("unused")
	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);
		} 
	}
}`

3 Respostas

D

Olá

Não sei ao certo, mas acredito que a exceção que está dando aponta a linha

segnumero = Double.parseDouble(this.pilha.topo());

No trecho “(-10” da expressão tem o operador de subtração, quando é lido este operador, a pilha provavelmente está vazia e o “this.pilha.topo()” deve estar retornando “null” ou algum outro valor que não é número.

Para arrumar isso, você precisaria checar se o item anterior é operador:

Se tem operador antes então
    calcula( 0 , operando , segundo);
senão
    calcula( primeiro , operando , segundo);

Acredito que não bastaria checar se apilha estiver vazia, mas você pode testar.

L

Alguém pode me dizer como faço uma pergunta aqui no fórum to perdido.

L

Sim, basta estar na página inicial e ir até “Novo Tópico”. Siga as instruções abaixo:

Criado 25 de maio de 2016
Ultima resposta 28 de mai. de 2016
Respostas 3
Participantes 4