Estou montando um projeto onde ele devo digitar uma expressão e ele deve fazer o calculo, consegui fazer para um algarismo, a ideia agora é fazer para 2 algarismo e casas decimais, estou com dificuldades pra implantar a logica podem me ajudar?? O mesmo usa Notação polonesa reversa juntamente com pilha dinamica.
Segue abaixo o que já foi feito!!
Att
Leandro
[code]
import javax.swing.;
import java.util.;
public class NPR_Numeros {
//public class NPR_Numeros() {
public static float avaliaExpressao(String npr){
Stack p = new Stack();
char letra;
float valor=0, x, y;
String valor2="";
for(int i=0;i<npr.length(); i++){
letra = npr.charAt(i);
if(letra>='0' && letra <='9'){
//valor2= JOptionPane.showInputDialog(null, "Entre com o valor da leta "+letra);
p.push(letra);
}
else if(letra=='+' ||letra=='-' ||letra=='*' ||letra=='/'){
x=Float.parseFloat(p.pop().toString());
y=Float.parseFloat(p.pop().toString());
switch(letra){
case '+': valor = y+x; break;
case '-' : valor =y-x; break;
case '*': valor = y*x; break;
case '/' : valor =y/x; break;
}
p.push(valor);
}
}
valor = Float.parseFloat(p.pop().toString());
// String valor3="";
// valor3=valor.toString();
return valor;
}
public static int prio (char op){
int resp=0;
switch(op){
case ‘(’: resp=1; break;
case ‘+’: resp=2; break;
case ‘-’: resp=2; break;
case ‘*’: resp=3; break;
case ‘/’: resp=3;
} return resp;
}
public static String toNPR2(String a){
a = a.toUpperCase();
Stack pri = new Stack();
String saida="";
char ch;
for (int i=0; i<a.length();i++){
ch = a.charAt(i);
if(ch>='0' && ch<='9'){
saida+=ch;
}
else if(ch=='+' || ch=='-' || ch=='*' || ch=='/'){
while(!pri.empty() && prio(pri.peek().toString().charAt(0)) >= prio(ch)){
saida+=pri.pop(); }
pri.push(ch + "");
}
else if (ch=='('){
pri.push(ch);
}
else if (ch==')'){
while(!pri.peek().toString().equals("(")){
saida+=pri.pop().toString();}
pri.pop();
}
}do{
saida+=pri.pop().toString();
}while(!pri.empty());
return saida;
}
public static void main(String args[]){
String x ="";
String resp="";
x= JOptionPane.showInputDialog(null, "Entre com a equação: ");
resp = toNPR2(x);
JOptionPane.showMessageDialog(null,"Resposta= " + avaliaExpressao(resp));
}
}[/code]