Calculadora... resolver expressões

Há um tempo eu quebro cabeça tentando fazer com que minha calculadora resolva expressões do tipo… 1+3-2*4/2= 4
queria que vocês me dessem uma luz…

[code]//Parte da Interface

verifica =false;  
 
          //Botão 1  
           if(e.getSource()==btn[12]){  
                  umaParcela = c.obtemParcela(verifica, visor, "1");  
               verifica = c.getVerifica();  
         }  
           
         //Botão 2  
         if(e.getSource()==btn[13]){  
                umaParcela = c.obtemParcela(verifica, visor, "2");  
               verifica = c.getVerifica();  
         }  
           
         //Botão 3  
         if(e.getSource()==btn[14]){  
                umaParcela = c.obtemParcela(verifica, visor, "3");  
                verifica = c.getVerifica();  
          }  
 
        //Botão =  
          if(e.getSource()==btn[18]){  
                 String resultado = null;  
                   
                 if (oper == '+')  
                   resultado = c.controle(new Soma(), outraParcela, umaParcela);  
                      
                 if (oper == '-')  
                     resultado = c.controle(new Subtracao(), outraParcela, umaParcela);  
 
                 if (oper == '*')  
                     resultado = c.controle(new Multiplicacao(), outraParcela, umaParcela);  
 
                 if (oper == '/')  
                     resultado = c.controle(new Divisao(), outraParcela, umaParcela);  
                      
                 visor.setText(resultado);  
                 umaParcela = resultado;  
                 outraParcela="";  
                 verifica = true;  
          }  
 
        //Botão +  
          if(e.getSource()==btn[19]) {  
                 oper = '+';  
                 outraParcela = umaParcela;  
                 umaParcela = "0";  
                 verifica = true;  
                                                 }  

//Parte da Classe Controle
public String obtemParcela(Boolean ver, JLabel lb_visor, String str_dig)
{
String res = “”;
verifica = ver;
if (!verifica){
if(lb_visor.getText() != “0”){
res = lb_visor.getText() + str_dig;;
lb_visor.setText(res);
}
else{
lb_visor.setText(str_dig);
res = lb_visor.getText();
}
}
else{
verifica = false;
lb_visor.setText("");
lb_visor.setText(str_dig);
res = lb_visor.getText();
}
return res;
}

   public Boolean getVerifica(){  
             return verifica;  
   }  
         
   public String controle(Operacao op, String operando1, String operando2){           
       return  op.calcule(operando1,operando2);      
   }             

}

//Classe Operacao
public abstract class Operacao {

  public double strDb(String sn){  
       return Double.parseDouble(sn);  
   }  
     
   public abstract String calcule(String primeiraParcela, String segundaParcela);  

}

//Classe Soma
public class Soma extends Operacao{
public String calcule(String pp, String sp)
{
double som;
som = strDb(pp) + strDb(sp);
return Double.toString(som);
}
} [/code]

1° 1+3-2*4/2= 4
Esse resultado não é 4.
Ele deve primeiro resolver * e /
Sendo assim
1+3-8/2
4-4=0

Agora, eu implementei isso e voce pode ver aqui:

Aqui no GUJ ja teve essa discussão e colocaram links para voce aprender como fazer isso mas eu não achei. Se voce procurar da para entender como funciona.

Mas se você pressionar essas teclas em uma calculadora respectivamente… 1 + 3 - 2 * 4 / 2 o reultado será igual a 4

até porque não dá pra entrar com uma expressão do tipo [1+(3*3)-]/2 em uma calculadora… pelo menos eu acho :wink:

[quote=Rosame]Mas se você pressionar essas teclas em uma calculadora respectivamente… 1 + 3 - 2 * 4 / 2 o reultado será igual a 4

até porque não dá pra entrar com uma expressão do tipo [1+(3*3)-]/2 em uma calculadora… pelo menos eu acho :wink:
[/quote]

Porque a calculadora que você usou não resolve expressões, apenas cálculos simples, passo a passo.
Se você realmente quer fazer uma calculadora, a ordem de precedência dos operadores deve ser levada em conta.

[size=12] justamente… Minha calculadora resolve somente expressões com duas parcelas… e é isso que eu quero mudar

Mas… vc pode me esclarecer
“a ordem de precedência dos operadores deve ser levada em conta”
[/size]

[quote=Rosame][size=12] justamente… Minha calculadora resolve somente expressões com duas parcelas… e é isso que eu quero mudar

Mas… vc pode me esclarecer
“a ordem de precedência dos operadores deve ser levada em conta”
[/size][/quote]

2+3*8 = ?

Multiplicação e divisão devem ser avaliados antes de soma e subtração.