Problemas Calculadora

8 respostas
D

Boa noite. Estou tendo dificuldades em um exercício, preciso fazer uma calculadora. O layout já foi passado pelo professor, eu realmente só preciso fazer a programação dos botões.
O esquema da calculadora é: Digitar um numero, depois o outro, em seguida escolher a operação desejada. A dúvida é: Quando escolho operações que só precisam de um numero (Ex:Raiz), ele dá erro pedindo o segundo numero, sendo que o segundo numero não é necessário. Alguém pode me ajudar? Segue o código:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;


class Ex7 extends JFrame implements ActionListener{
    
         
    JLabel LNum1,LNum2,LResultado,LBranco1,LBranco2;
    JButton BSoma, BSubtrai, BMultiplica, BDivide, BQuad, BPot, BRaiz, BLimpa;
    JTextField TNum1,TNum2,TResultado;   
    

    public static void main(String args[]){
        
   
        JFrame GUI = new Ex7();
       
     
        GUI.setVisible(true);
        
     
        GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
    } 
    public Ex7(){
        
    
        setTitle("Segundo Exercicio");
        
        setSize(400,250);
        
        setLocation(200,200);
        
        getContentPane().setBackground(new Color(220,220,220));

        setLayout(new GridLayout(4,4));

 
        LNum1 = new JLabel("1°Núm.");
        
        LNum1.setForeground(Color.blue);
  
        LNum1.setFont(new Font("",Font.PLAIN,16));
        
        LNum2 = new JLabel("2°Núm.");
   
        LNum2.setForeground(Color.blue);
      
        LNum2.setFont(new Font("",Font.PLAIN,16));
              
        LResultado = new JLabel("Resultado");
 
        LResultado.setFont(new Font("",Font.PLAIN,16));

        LResultado.setForeground(Color.red);
        
        LBranco1 = new JLabel("");
        
        LBranco2 = new JLabel("");

        BSoma = new JButton ("+");      
     
        BSoma.addActionListener(this);
        
        BSubtrai = new JButton ("-");      

        BSubtrai.addActionListener(this);
        
        BMultiplica = new JButton ("x");      
   
        BMultiplica.addActionListener(this);
        
        BDivide = new JButton ("/");      
    
        BDivide.addActionListener(this);
        
        BQuad = new JButton ("Quadrado");      
       
        BQuad.addActionListener(this);
        
        BPot = new JButton ("Potência");      
    
        BPot.addActionListener(this);
        
        BRaiz = new JButton ("Raiz");      
  
        BRaiz.addActionListener(this);
        
        BLimpa = new JButton ("Limpar"); 
     
        BLimpa.addActionListener(this);
 
        BLimpa.setBackground(Color.red);
      
        BLimpa.setForeground(Color.white);
        
        TNum1 = new JTextField();
        
        TNum2 = new JTextField();
       
        TResultado = new JTextField();
       
        TResultado.setEditable(false);  

        add(LNum1);
        
        add(TNum1);
     
        add(BSoma);

        add(BSubtrai);
    
        add(LNum2);
        
        add(TNum2);
       
        add(BMultiplica);
   
        add(BDivide);
 
        add(LResultado);

        add(TResultado);
      
        add(BQuad);
        
        add(BPot);
        
        add(LBranco1);
        
        add(LBranco2);
        
        add(BRaiz);
        
        add(BLimpa);
    } 
    
    
    public void actionPerformed(ActionEvent evento){
        

        if (evento.getSource()==BLimpa)
        {
    
            TNum1.setText("");  
                   
            TNum2.setText("");  
    
            TResultado.setText("");
            
            return;
        }
        
       
        float num1=0,num2=0,resultado=0;

        try
        {
             
     
            num1 = Float.parseFloat(TNum1.getText());
                                  
                         num2 = Float.parseFloat(TNum2.getText());
                            
            }
            
                  
         
            
        catch (NumberFormatException erro)
        { 
            
   
            TResultado.setText("Erro");
         
            return;
        } 
        

        if (evento.getSource()==BSoma)
            resultado = num1 + num2;
     
        if (evento.getSource()==BSubtrai)
            resultado = num1 - num2;

        if (evento.getSource()==BMultiplica)
            resultado = num1 * num2;
     
        if (evento.getSource()==BDivide)
            resultado = num1 / num2;
        
          if (evento.getSource()==BQuad)
            resultado = num1 * num1;
                 
          if (evento.getSource()==BPot)
            resultado = (float) Math.pow(num1, num2);
         
          
          if (evento.getSource()==BRaiz)
            resultado = (float) Math.sqrt(num1);
        
        
        
        
        TResultado.setText(String.valueOf(resultado));
        
    } 
}

8 Respostas

Ruttmann

Você tem que verificar onde é que está codificado esse comportamento de pedir 2 números.

Não seria mais interessante você digitar o primeiro número, em seguida a operação e só depois o segundo número? Acredito que desse modo fica mais fácil você filtrar e executar o comportamento desejado, dependendo do operador escolhido.

drsmachado

O erro ocorre por conta desta linha

num2 = Float.parseFloat(TNum2.getText());

O ideal seria que você lesse o conteúdo de TNum2 (nome de objeto não é com letra minúscula?) em uma String, verificasse se é uma operação e, sendo, proceder com o cálculo. Não sendo, converter em número.

D

Ruttmann:
Você tem que verificar onde é que está codificado esse comportamento de pedir 2 números.

Não seria mais interessante você digitar o primeiro número, em seguida a operação e só depois o segundo número? Acredito que desse modo fica mais fácil você filtrar e executar o comportamento desejado, dependendo do operador escolhido.

Seria, mas eu tenho que seguir o exercício conforme foi pedido. Tem que digitar os dois, depois a operação. Também acho que fica ruim, mas…

D

drsmachado:
O erro ocorre por conta desta linha

num2 = Float.parseFloat(TNum2.getText());

O ideal seria que você lesse o conteúdo de TNum2 (nome de objeto não é com letra minúscula?) em uma String, verificasse se é uma operação e, sendo, proceder com o cálculo. Não sendo, converter em número.

Amigo, eu não entendi muito bem o que vc quis dizer, tenho dificuldade ainda. Você poderia me mostrar como ficaria o código, por gentileza?

drsmachado

diegovaz:

Amigo, eu não entendi muito bem o que vc quis dizer, tenho dificuldade ainda. Você poderia me mostrar como ficaria o código, por gentileza?

Já experimentou estuda um pouco para ver se essa dificuldade é contornada?

D

drsmachado:
diegovaz:

Amigo, eu não entendi muito bem o que vc quis dizer, tenho dificuldade ainda. Você poderia me mostrar como ficaria o código, por gentileza?

Já experimentou estuda um pouco para ver se essa dificuldade é contornada?

Amigao, eu tô aqui pra pedir ajuda, se não sabe sanar minha dúvida, não fica querendo me dar lição.

B

if(!TNum2.getText().equal("")){ num2 = Float.parseFloat(TNum2.getText()); }

Se não haver nada digitado no tnun2 ele ignora ele

D

Beregula:
if(!TNum2.getText().equal("")){ num2 = Float.parseFloat(TNum2.getText()); }

Se não haver nada digitado no tnun2 ele ignora ele

Putz…apenas um if resolveu meu problema. Muito obrigado pela atenção amigo, valeu mesmo.

Criado 6 de março de 2014
Ultima resposta 10 de mar. de 2014
Respostas 8
Participantes 4