Código simplesmente não faz o que deveria, por favor me ajudem

6 respostas
M

Tenho três classe, a primeira está programada para que, quando a 2º classe obtiver o valor 2 na váriavel "as", ela mande uma mensagem no sistema. O código está assim:

1º classe:

package testelog;
public class TesteLog {
public static void main(String[] args) {
        
        dois classe2 = new dois();  
        
        if (2 == classe2.pontos){
            System.out.println("Mensagem");
        }      
        
    }
    
}

E a 2º classe:

package testelog;
import java.awt.Image;
import javax.swing.JOptionPane;
public class dois extends javax.swing.JFrame {
    public dois() {
        initComponents();
        setLocationRelativeTo(null);  
    }
    GENERATED CODE
    
    private void sairActionPerformed(java.awt.event.ActionEvent evt) {                                     
        System.exit(0);
    }                                    

    private void voltarActionPerformed(java.awt.event.ActionEvent evt) {                                       
        this.dispose();
        new um().setVisible(true);
    }                                      

    // minha dúvida começa aqui
    int pontos = 1;       
    int an = 0;  
    private void m1ActionPerformed(java.awt.event.ActionEvent evt) {                                   
        if (pontos == 1){
        pontos++;
        an++;
        JOptionPane.showMessageDialog(this.m1, "Recebeu +1 ponto de: " +an + " pontos.");
        }
       else if (pontos == 2){
            JOptionPane.showMessageDialog(this.m1, "Sua escolha já foi computada, clique em próximo para continuar");
            
        }
        
    }                                  

    int gi = 0;
    private void m2ActionPerformed(java.awt.event.ActionEvent evt) {                                   
        if (pontos == 1){
        pontos++;
        gi++;
        JOptionPane.showMessageDialog(this.m2, "Recebeu +1 ponto de: " +gi + " pontos."); 
        }
        else if (pontos == 2) {
            JOptionPane.showMessageDialog(this.m2, "Sua escolha já foi computada, clique em próximo para continuar");            
        }
    }                                  

    private void pontos1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        JOptionPane.showMessageDialog(this.m1, "Possuí o total de: " +an + " pontos.");
    }                                       

    private void pontos2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        JOptionPane.showMessageDialog(this.m2, "Possuí o total de: " +gi + " pontos.");
    }                                       

    
    private void m1ComponentRemoved(java.awt.event.ContainerEvent evt) {                                    
        System.exit(0);
    }                                   

    private void ProximoActionPerformed(java.awt.event.ActionEvent evt) {                                        
        if (pontos == 2){
        this.dispose();
        new tres().setVisible(true);
        }
        else if (pontos == 1){
            JOptionPane.showMessageDialog(this.rootPane, "Antes de avançar escolha uma menina");
        }
    }                                       


    public static void main(String args[]) {
        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(dois.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(dois.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(dois.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(dois.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
 
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new dois().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton Proximo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JButton m1;
    private javax.swing.JButton m2;
    private javax.swing.JButton pontos1;
    private javax.swing.JButton pontos2;
    private javax.swing.JButton sair;
    private javax.swing.JButton voltar;
    // End of variables declaration                   
}

O que eu quero entender é: Por que mesmo eu atingindo o valor "2" na variável "pontos" não recebo a mensagem no sistema?

6 Respostas

RodrigoKaos
Adiciona essa linha a classe TesteLog pra vc ver o valor de em classe2.pontos
dois classe2 = new ...

     System.out.println(classe2.pontos);

     if...
Então vc vai ver que o valor não é 2.

O programa faz exatamente o que foi escrito, o problema ta na sua logica, da uma pesquisada, existem muitas aulas online com Portugol, ou C.

Outra coisa, para de usar o NetBeans, ele só vai atrapalhar teu aprendizado

M

Mas esse evento deveria aumentar o valor da variável pontos, não?

private void m2ActionPerformed(java.awt.event.ActionEvent evt) { if (pontos == 1){ pontos++; gi++; JOptionPane.showMessageDialog(this.m2, "Recebeu +1 ponto de: " +gi + " pontos."); } else if (pontos == 2) { JOptionPane.showMessageDialog(this.m2, "Sua escolha já foi computada, clique em próximo para continuar"); } }

Ou por ela ser “private” não modificaria o valor na 1º classe ?

RodrigoKaos

Se o método for chamado…

o private faz com que o método ou o atributo só seja acessível de dentro da classe

voce pode torna-lo publico, ou criar um método publico que chame o privado, por exemplo

M

Desculpe minha ignorância, mas ainda não consegui entender. Mesmo após ter chamado o método, o valor não muda na classe principal, o que estou fazendo de errado?

private void menina2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        if (pontos == 1) {
            pontos++;
            gi++;                        
            JOptionPane.showMessageDialog(this.menina2, "Recebeu +1 ponto de: " + gi + " pontos.");
        } else if (pontos == 2) {
            JOptionPane.showMessageDialog(this.menina2, "Sua escolha  foi computada, clique em próximo para continuar");               
        }
        
    }                                       
  
    public int getPontos(){
        return this.pontos;
    }
public class TesteLog {
public static void main(String[] args) {
        
        classe2 dois = new classe2();
        
        if(dois.getPontos() == 2){                // essa função nunca é executada, esse é o problema.
            System.out.println("Pontos igual à 2");
        }       
    
    } 
}
RodrigoKaos

Brother da uma lida nisso.
Espero que te ajude.

RodrigoKaos

Roda esse aqui pra vc ver se entende

public class TesteLog {
public static void main(String[] args) {
        
        classe2 dois = new classe2();
        
        //dois.getPontos() é igual a 1
        if(dois.getPontos() == 2){
            // A condição é falsa, então esse bloco não é executado
            System.out.println("Pontos igual à 2");
        }else{
            //Se a condição não for verdadeira, esse bloco será executado
            System.out.println(dois.getPontos());
        }    
}
Criado 26 de dezembro de 2013
Ultima resposta 27 de dez. de 2013
Respostas 6
Participantes 2