Dúvida - Calculadora (com JFrame)

5 respostas
T

Olá, estou tentando criar uma calculadora em java (como fui orientada no meu curso). No material que eu tenho é dado um exemplo de cada passo da criação do código e pede para irmos completando. No caso das operações o exemplo que tinha era o da SOMA e pedia para fazer as outras. Consegui fazer SUBTRACAO e RAIZQ (raíz quadrada), mas não consigo fazer nem DIVISAO nem MULTIPLICACAO. Quando clico no botão da operação era pra continuar na tela o número que eu acabei de digitar e esperar eu digitar o próximo número, só que em vez disso aparece “0.0” Alguém pode me dizer o que está errado?

public class Calculadora extends javax.swing.JFrame {
    
    private double v1;
    private double v2;
    private Operacao operacao = Operacao.NENHUMA;
    private boolean limpar;
    
    
    public void operar(){
        switch (operacao){
            case NENHUMA:
                v1 = v2;
                break;
            case SOMA:
                v1 = v1+v2;
                break;
            case SUBTRACAO:
                v1 = v2-v1;
                break;  
            case DIVISAO:
                v1= v1/v2;
                break;
            case MULTIPLICACAO:
                v1 = v1 * v2;
                break;
            case RAIZQ:
                v1 = Math.sqrt(v2);
        }
        visor.setText(String.valueOf(v1));
        limpar = true;
    }
    public void limpar(){
        if (limpar){
            visor.setText("");
        }
        limpar = false;
    }
 public enum Operacao {
                  NENHUMA, SOMA, SUBTRACAO,DIVISAO,MULTIPLICACAO, RAIZQ
         }
    /**
     * Creates new form Calculadora
     */
    public Calculadora() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        visor = new javax.swing.JTextField();
        zero = new javax.swing.JButton();
        ponto = new javax.swing.JButton();
        um = new javax.swing.JButton();
        dois = new javax.swing.JButton();
        tres = new javax.swing.JButton();
        igual = new javax.swing.JButton();
        quatro = new javax.swing.JButton();
        cinco = new javax.swing.JButton();
        seis = new javax.swing.JButton();
        mais = new javax.swing.JButton();
        sete = new javax.swing.JButton();
        oito = new javax.swing.JButton();
        nove = new javax.swing.JButton();
        menos = new javax.swing.JButton();
        del = new javax.swing.JButton();
        div = new javax.swing.JButton();
        mult = new javax.swing.JButton();
        raizq = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        visor.setEditable(false);
        visor.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        visor.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

        zero.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        zero.setText("0");
        zero.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                zeroMouseClicked(evt);
            }
        });

        ponto.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        ponto.setText(".");
        ponto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pontoActionPerformed(evt);
            }
        });

        um.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        um.setText("1");
        um.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                umActionPerformed(evt);
            }
        });

        dois.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        dois.setText("2");
        dois.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                doisActionPerformed(evt);
            }
        });

        tres.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        tres.setText("3");
        tres.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tresActionPerformed(evt);
            }
        });

        igual.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        igual.setText("=");
        igual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                igualActionPerformed(evt);
            }
        });

        quatro.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        quatro.setText("4");
        quatro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                quatroActionPerformed(evt);
            }
        });

        cinco.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        cinco.setText("5");
        cinco.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cincoActionPerformed(evt);
            }
        });

        seis.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        seis.setText("6");
        seis.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                seisActionPerformed(evt);
            }
        });

        mais.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        mais.setText("+");
        mais.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                maisActionPerformed(evt);
            }
        });

        sete.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        sete.setText("7");
        sete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                seteActionPerformed(evt);
            }
        });

        oito.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        oito.setText("8");
        oito.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                oitoActionPerformed(evt);
            }
        });

        nove.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        nove.setText("9");
        nove.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                noveActionPerformed(evt);
            }
        });

        menos.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        menos.setText("-");
        menos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menosActionPerformed(evt);
            }
        });

        del.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        del.setText("DEL");
        del.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                delActionPerformed(evt);
            }
        });

        div.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        div.setText("/");
        div.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                divActionPerformed(evt);
            }
        });

        mult.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        mult.setText("*");
        mult.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                multActionPerformed(evt);
            }
        });

        raizq.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        raizq.setText("&#8730;");
        raizq.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                raizqActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(visor)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(zero, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(div, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(um, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 53, Short.MAX_VALUE)
                                    .addComponent(quatro, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(sete, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(oito, javax.swing.GroupLayout.DEFAULT_SIZE, 53, Short.MAX_VALUE)
                                    .addComponent(dois, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(cinco, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(mult, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(tres, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(ponto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(seis, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(nove, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(raizq, javax.swing.GroupLayout.DEFAULT_SIZE, 56, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(igual, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(mais, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(menos, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(del))))
                .addContainerGap(25, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(visor, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(div, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(raizq, javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE)
                    .addComponent(mult, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(del, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(sete, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(oito, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(nove, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(menos, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(quatro, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(seis, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(cinco, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(um, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(dois, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(tres, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(zero, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(ponto, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(1, 1, 1))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(mais, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(igual, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(20, 20, 20))
        );

        pack();
    }// </editor-fold>

    private void zeroMouseClicked(java.awt.event.MouseEvent evt) {                                  
        limpar();
        visor.setText(visor.getText()+"0");
    }                                 

    private void umActionPerformed(java.awt.event.ActionEvent evt) {                                   
        limpar();
        visor.setText(visor.getText()+"1");
    }                                  

    private void doisActionPerformed(java.awt.event.ActionEvent evt) {                                     
        limpar();
        visor.setText(visor.getText()+"2");
    }                                    

    private void tresActionPerformed(java.awt.event.ActionEvent evt) {                                     
        limpar();
        visor.setText(visor.getText()+"3");
    }                                    

    private void quatroActionPerformed(java.awt.event.ActionEvent evt) {                                       
        limpar();
        visor.setText(visor.getText()+"4");
    }                                      

    private void cincoActionPerformed(java.awt.event.ActionEvent evt) {                                      
        limpar();
        visor.setText(visor.getText()+"5");
    }                                     

    private void seisActionPerformed(java.awt.event.ActionEvent evt) {                                     
        limpar();
        visor.setText(visor.getText()+"6");
    }                                    

    private void seteActionPerformed(java.awt.event.ActionEvent evt) {                                     
        limpar();
        visor.setText(visor.getText()+"7");
    }                                    

    private void oitoActionPerformed(java.awt.event.ActionEvent evt) {                                     
        limpar();
        visor.setText(visor.getText()+"8");
    }                                    

    private void noveActionPerformed(java.awt.event.ActionEvent evt) {                                     
        limpar();
        visor.setText(visor.getText()+"9");
    }                                    

    private void maisActionPerformed(java.awt.event.ActionEvent evt) {                                     
        v2 = Double.parseDouble(visor.getText());
        operacao = Operacao.SOMA;
        operar();
    }                                    

    private void menosActionPerformed(java.awt.event.ActionEvent evt) {                                      
        v2 = Double.parseDouble(visor.getText());
        operacao = Operacao.SUBTRACAO;
        operar();
    }                                     

    private void igualActionPerformed(java.awt.event.ActionEvent evt) {                                      
        v2 = Double.parseDouble(visor.getText());
        operar();
        operacao = Operacao.NENHUMA;
    }                                     

    private void delActionPerformed(java.awt.event.ActionEvent evt) {                                    
        limpar();
        visor.setText("");
    }                                   

    private void divActionPerformed(java.awt.event.ActionEvent evt) {                                    
        v2 = Double.parseDouble(visor.getText());
        operacao = Operacao.DIVISAO;
        operar();
    }                                   

    private void multActionPerformed(java.awt.event.ActionEvent evt) {                                     
        v2 = Double.parseDouble(visor.getText());
        operacao = Operacao.MULTIPLICACAO;
        operar();
    }                                    

    private void raizqActionPerformed(java.awt.event.ActionEvent evt) {                                      
        v2 = Double.parseDouble(visor.getText());
        operacao = Operacao.RAIZQ;
        operar();
    }                                     

    private void pontoActionPerformed(java.awt.event.ActionEvent evt) {
        limpar();
        visor.setText(visor.getText()+".");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
       /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Calculadora.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Calculadora.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Calculadora.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Calculadora.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Calculadora().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton cinco;
    private javax.swing.JButton del;
    private javax.swing.JButton div;
    private javax.swing.JButton dois;
    private javax.swing.JButton igual;
    private javax.swing.JButton mais;
    private javax.swing.JButton menos;
    private javax.swing.JButton mult;
    private javax.swing.JButton nove;
    private javax.swing.JButton oito;
    private javax.swing.JButton ponto;
    private javax.swing.JButton quatro;
    private javax.swing.JButton raizq;
    private javax.swing.JButton seis;
    private javax.swing.JButton sete;
    private javax.swing.JButton tres;
    private javax.swing.JButton um;
    private javax.swing.JTextField visor;
    private javax.swing.JButton zero;
    // End of variables declaration
}

A maior parte do código foi feita pelo próprio programa (Netbeans) à medida em que fui adidionando os elementos ao JFrame.

Desculpem aí qualquer coisa, esse é meu primeiro post. Agradeço quem puder ajudar.

5 Respostas

V

Tente usar o depurador. Mas provavelmente você está chamando o método operar() com algum valor inválido.

Vou mover esse tópico para o fórum de interface gráfica.

T

Tente usar o depurador. Mas provavelmente você está chamando o método operar() com algum valor inválido.

Vou mover esse tópico para o fórum de interface gráfica.


Desculpe ter criado o tópico no lugar errado.
Mas o método operar() está igual ao usado nas outras operações que estão funcionando.
O que é e como eu faço para usar esse depurador? Nunca usei.

V

Você usa eclipse ou netbeans?

V

Você está chamando operar assim que clica no sinal.

Quando você faz isso para SOMA ou SUBTRAÇÃO, a operação inicial será:
v1 = v1 + v2; ou
v1 = v2 - v1;

Que resulta em:

v1 = 0 + v2;

v1 = v2 - v1;

v1 = 0 - v1;

E por isso, o número se mantém. Entretanto, na multiplicação, o que ocorre é:
v1 = v1 * v2;

Que dá:
v1 = 0 * v2;

E como você sabe, o resultado disso é 0.

Daí seu erro. Você não pode chamar operar sempre. Você deve chamar apenas quando tiver 2 operandos.
Por isso, calculadoras normalmente só realizam o cálculo quando você clica no sinal de =.
Ou então, realizam a operação anterior quando você clica num outro sinal de operação.

Por exemplo, considere a seguinte entrada de teclas:
2
+
2 --> aqui a calculadora ainda não escreveu 4

  • –> Agora sim, calcula 2+2 e escreve 4
    5 --> Ainda não escreveu 20
    = --> Agora sim, escreve 20.

Isso também explica pq vc teve que inverter na subtração, pois seu resultado com v1 - v2 provavelmente estava saindo negativo (já que 0 - v2 dá -v2).

T

Uso mais o Netbeans e foi o que eu usei para esse programa. Estou começando a usar o Eclipse agora. Mas você poderia me dizer como usar o depurador nos dois?

Você está chamando operar assim que clica no sinal.

Quando você faz isso para SOMA ou SUBTRAÇÃO, a operação inicial será:
v1 = v1 + v2; ou
v1 = v2 - v1;

Que resulta em:

v1 = 0 + v2;

v1 = v2 - v1;

v1 = 0 - v1;

E por isso, o número se mantém. Entretanto, na multiplicação, o que ocorre é:
v1 = v1 * v2;

Que dá:
v1 = 0 * v2;

E como você sabe, o resultado disso é 0.

Daí seu erro. Você não pode chamar operar sempre. Você deve chamar apenas quando tiver 2 operandos.
Por isso, calculadoras normalmente só realizam o cálculo quando você clica no sinal de =.
Ou então, realizam a operação anterior quando você clica num outro sinal de operação.

Por exemplo, considere a seguinte entrada de teclas:
2
+
2 --> aqui a calculadora ainda não escreveu 4

  • –> Agora sim, calcula 2+2 e escreve 4
    5 --> Ainda não escreveu 20
    = --> Agora sim, escreve 20.

Obrigada pela explicação. Consegui ajeitar o código, bastava inverter a ordem:
ANTES

private void menosActionPerformed(java.awt.event.ActionEvent evt) { v2 = Double.parseDouble(visor.getText()); operacao = Operacao.MULTIPLICACAO; operar(); }
DEPOIS

private void multActionPerformed(java.awt.event.ActionEvent evt) { v2 = Double.parseDouble(visor.getText()); operar(); operacao = Operacao.MULTIPLICACAO; }

Criado 1 de junho de 2012
Ultima resposta 4 de jun. de 2012
Respostas 5
Participantes 2