Calculadora - Executar mais de uma operação

3 respostas
G

Pessoal,

Fiz uma calc, só que está com um problema…está executando apenas uma função por vez…exemplo:

Se fizer 3 + 3 = vai me devolver 6, se fizer + 2 = me devolve 8, se fizer / 2, me devolve 4.

Mas se fizer 3 + 3 + 2 + 1 = me devolve 6, executa somente a primeira operação.

Aí segue o código para darem uma olhada…espero que possam me ajudar.

public void actionPerformed(ActionEvent e){
		Object obj=e.getSource();
		

		if (obj == btpoint) {   
            if (vlr1 == 0){   
                display.setText("0.");   
  
            }
            else if (((display.getText()).indexOf(".")) == -1){   
                    display.setText(display.getText()+".");  
          }     
        }
		

		if(obj==bt0){
			display.setText(display.getText()+"0");
		}
		else if(obj==bt1){
			display.setText(display.getText()+"1");
		}
		else if(obj==bt2){
			display.setText(display.getText()+"2");
		}
		else if(obj==bt3){
			display.setText(display.getText()+"3");
		}
		else if(obj==bt4){
			display.setText(display.getText()+"4");
		}
		else if(obj==bt5){
			display.setText(display.getText()+"5");
		}
		else if(obj==bt6){
			display.setText(display.getText()+"6");
		}
		else if(obj==bt7){
			display.setText(display.getText()+"7");
		}
		else if(obj==bt8){
			display.setText(display.getText()+"8");
		}
		else if(obj==bt9){
			display.setText(display.getText()+"9");
		}
		else if(obj==btlimpa){
			display.setText(null);
		}
		else if(obj==btadi){
			aux=1;
			vlr1=Double.parseDouble(display.getText());
			display.setText(null);
		}
		else if(obj==btsub){
			aux=2;
			vlr1=Double.parseDouble(display.getText());
			display.setText(null);
		}
		else if(obj==btmul){
			aux=3;
			vlr1=Double.parseDouble(display.getText());
			display.setText(null);
		}
		else if(obj==btdiv){
			aux=4;
			vlr1=Double.parseDouble(display.getText());
			display.setText(null);
		}
		else if (obj == btraiz){
			vlr1=Double.parseDouble(display.getText());
			resultado = Math.sqrt(vlr1);
			display.setText(""+resultado);
		}
		else if (obj == btsignal){
			vlr1=Double.parseDouble(display.getText())*(-1);
			display.setText(Double.toString(vlr1));
			aux=5;
		}
		else if (obj == btinv){
			vlr1=Double.parseDouble(display.getText());
			vlr1 = 1/vlr1;
			display.setText(Double.toString(vlr1));
		}
		else if(obj==btigual){
			display.setText(""+resultado);
		}
			switch(aux){
			case 1:
				vlr2=Double.parseDouble(display.getText());
				
				resultado=vlr1+vlr2;
				break;
			case 2:
				vlr2=Double.parseDouble(display.getText());
				resultado=vlr1-vlr2;
				break;
			case 3:
				vlr2=Double.parseDouble(display.getText());
				resultado=vlr1*vlr2;
				break;
			case 4:
				vlr2=Double.parseDouble(display.getText());
				resultado=vlr1/vlr2;
				break;
		}
	}

3 Respostas

LPJava

acontece isso pq no case vc manda somar sempre os dois primeiros numeros… e nao um conjunto de numeros… agora seu codigo cheio de if…else nao é uma boa pratica de programacao… separe as coisas para facilitar a compreensao…

Para solução vc pode ir armazenando o valor que o cara for digitando de acordo com operação… por exemplo, as vezes no fazemos isso

x+=x;

entao veja como pode acrescentar a funcionalidade no seu codigo… eu poderia pegar seu codigo editar e ti dar uma resposta… mais acho q nao estaria de ajudando de forma construtiva…

flw!!

Alkamavo
switch(aux){  
             case 1:  
                 vlr2=Double.parseDouble(display.getText());  
                   
                 resultado=vlr1+vlr2;  
                 break;  
             case 2:  
                 vlr2=Double.parseDouble(display.getText());  
                 resultado=vlr1-vlr2;  
                 break;  
             case 3:  
                 vlr2=Double.parseDouble(display.getText());  
                 resultado=vlr1*vlr2;  
                 break;  
             case 4:  
                 vlr2=Double.parseDouble(display.getText());  
                 resultado=vlr1/vlr2;  
                 break;  
         }  
    }

nao tive tempo de testar o codigo...mas pela vista rapida neste switch ta o bagulho..

para adiçoes de mais de duas parcelas....acho k em vez de vlr1+vl2 devias ter algo do genero
vlr1 +=vlr1
que vai acumulando a soma. para subtração e multiplicação idem.

Para divisao o negoçio ta certo.

G

Obrigado…mas acabou gerando um novo probleminha…

//vlr2=Double.parseDouble(display.getText());
vlr1 += vlr1;
resultado=vlr1;
break;

se digitar 5+ ele já calcula para 10, e não armazena o 5 e espera outro valor…

Desculpem as perguntas básicas é q sou iniciante em OO e Java.

Criado 29 de abril de 2008
Ultima resposta 29 de abr. de 2008
Respostas 3
Participantes 3