`import java.util.Scanner;
public class AvaliadorDeExpressõesDemo {
public static void main (String[]args) {
// PilhaDeDoubles pdd=new PilhaDeDoubles();
Scanner ler=new Scanner(System.in);
AvaliadorDeExpressoes exp=new AvaliadorDeExpressoes();
String E=ler.next();
System.out.println( exp.avaliaExpressao(E));
}
}
`
import java.util.*;
class AvaliadorDeExpressoes {
public static Double avaliaExpressao(String exp) {
PilhaDeDoubles pilha= new PilhaDeDoubles();
StringTokenizer st=new StringTokenizer(exp);
while(st.hasMoreTokens()) {
String nextOp=st.nextToken();
System.out.println(nextOp);
if("+-*/".indexOf(nextOp.charAt(0))>0) {
double op1=pilha.pop();
double op2=pilha.pop();
double resultado=0;
switch(nextOp.charAt(0)) {
case '+':resultado = op1+op2;break;
case '-':resultado = op1-op2;break;
case '*':resultado = op1*op2;break;
case '/':resultado = op1/op2;break;
}
pilha.push(resultado);
}else{
double op= Double.parseDouble(nextOp);
pilha.push(op);
}
}
return pilha.pop();
}
}
import java.util.*;
public class PilhaDeDoubles {
LinkedList pilha;
PilhaDeDoubles() {
pilha= new LinkedList();
}
public void push(double valor) {
Double envelope= new Double(valor);
pilha.addFirst(envelope);
}
public Double pop() {
Double envelope=(double)pilha.getFirst();
pilha.removeFirst();
return envelope.doubleValue();
}
public boolean EstaVazia() {
return (pilha.size()==0);
}
public String toString() {
return pilha.toString();
}
}
tentem rodar nas suas máquinas esse programa, o objetivo é resolver operações como "1 2 * "( resposta =2) , tentem mudar a forma de declarar a expressão(`
String E=ler.next();
System.out.println( exp.avaliaExpressao(E));`)
tentem tbm
System.out.println( exp.avaliaExpressao("9 5 + "));//14`
ou ´
double P = exp.avaliaExpressao(“9 5 +”);
System.out.println( P));//14`´
vendo isso, notem que pra cada forma de declarar a expressão, ocorre um erro diferente.