Problemas com operações a partir de elementos retirados de pilha

1 resposta
F

Gurizada,

Estou com o seguinte problema: preciso implementar uma classe que leia uma expressão (String) e quando um operando for lido, ele é simplesmente inserido na pilha. Quando um operador for lido, os operandos necessários para efetuar a operação são retirados da pilha, processados, e o resultado é inserido na pilha. Desta maneira, ao final da execução, o que restará na pilha é o resultado final da expressão.

Ou seja, preciso receber uma expressão infixa e calcular na notação polonesa reversa...

Travei na hora de retirar da pilha os operandos necessários... a parte de identificar quando é operador e operando tá beleza...

Obs. Posso usar só PILHA, nada de lista nem ArrayList nem nada. Só Pilha!

Espero que tenham entendido e consigam me dar uma luz :P

Segue abaixo o trecho do código que consegui fazer:

public Object setPostfix(String expression) throws UnderflowException, OverflowException{
        char current;
        int size = expression.length();
        Stack pilha = new Stack(size);
        for(int i = 0; i < size; i++){
            current = expression.charAt(i);
            if(current >= '0' && current <= '9'){
                pilha.push(current);
            }else if(current == '+'){
                
            }
        }
        return pilha;
    }

Obrigado a todos!

Fico no aguardo de uma mãozinha!

1 Resposta

L

Então…

Primeiro que sua expressão soh trata números maiores que zero e menores que nove, onze, doze, etc nem pensar da maneira como esta ai.

Segundo, o que vc quer fazer? calcular o resultado final da expressão ou simplesmente colocar em uma pilha (vc tah retornando a pilha, porque não retorna o resultado da expressão?). Se for calcular a expressão vc pode criar sua pilha do tipo Integer, pois os operadores servirão apenas para processar os operandos que já estão na pilha:

Stack<Integer> pilha = new Stack<Integer>();

Sendo assim, quando um operador for lido, vc desempilha os dois ultimos numeros da pilha, calcula e empilha o resultado.

int i1 = pilha.pop();
int i2 = pilha.pop();
pilha.push(i1 + i2);

Caso a expressão seja valida, no final vc tera apenas um membro na filha (pilha.size() == 1), dessa forma eh soh retornar o unico valor que tiver nela.

return pilha.pop();

Ah, se vc tiver divisões na sua expressão, então sua pilha deve do tipo Double ou Float.

Criado 18 de abril de 2009
Ultima resposta 19 de abr. de 2009
Respostas 1
Participantes 2