Calculadora... resolver expressões

5 respostas
Rosame

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...

//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);  
        }  
  }

5 Respostas

Marky.Vasconcelos

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.

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:

renamed

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:

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.

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]

renamed

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]

2+3*8 = ?

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

Criado 3 de julho de 2010
Ultima resposta 3 de jul. de 2010
Respostas 5
Participantes 3