String - equals

8 respostas
analins

Pessoal,

Estou com problemas para comparar a senha com um valor definido real=“abc”.
Como devo fazer essa comparação ? com equals ou == ?

Minha classe:

public class TelaConf extends javax.swing.JFrame {

    public TelaConf() {
        initComponents();
    }
  
    SenhaC s3 = new SenhaC();
    char[] sen = s3.getPass3().getPassword(); 
    String real = "abc";


      if(sen.equals(real)){  
        
    {
       MensagemP p = new MensagemP();
       p.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);
       p.setVisible(true);
       setVisible(false);

}     else    

    { MensagemS s = new MensagemS();
      s.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);
      s.setVisible(true);
      setVisible(false);
    }

}

Pesquisei aqui no fórum e encontrei:

//Como o método getPassword retorna um array de chars
//devo usar:
String var = new String(edLogin.getPassword());

Fonte:

Fiz isso e continua dando erros.

Agradeço a todos.

8 Respostas

L

quando se fala em String é sempre utilizar equals, agora quando for outros tipos primitivos ai sim utilizar ==,

acho que isso resolve o seu problema, qualquer duvida posta ai

Marcelo_de_Andrade

Para Strings utilize o equals. Dê uma lida nesse tópico: http://www.guj.com.br/java/111243-explicacao-do-metodo-equals

analins

Como corrigir os erros abaixo ?

public class TelaConf extends javax.swing.JFrame {  
  
    public TelaConf() {  
        initComponents();  
    }  
    
    SenhaC s3 = new SenhaC();  
    char[] sen = s3.getPass3().getPassword();   
    String real = "abc";  
  
  
      if(sen.equals(real)){ //o erro acontece aqui, quando uso ==, dá erro também

//tentei com String sen = new String(s3.getPass3().getPassword());   // Continua dando erro.   
          
    {  
       MensagemP p = new MensagemP();  
       p.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);  
       p.setVisible(true);  
       setVisible(false);  
  
}     else      
  
    { MensagemS s = new MensagemS();  
      s.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);  
      s.setVisible(true);  
      setVisible(false);  
    }  
  
}
adrian.gois
public class TelaConf extends javax.swing.JFrame {    
    
    public TelaConf() {    
        initComponents();    
    }    
      
    SenhaC s3 = new SenhaC();   
     //Olha aqui o erro filha. Comparando char com equals. Alem de char[] ser um array de char o que nao parece que sua s3.getPass3().getPassword() retorna.
    char[] sen = s3.getPass3().getPassword();     
    //O correto seria, caso getPassword() retorno uma String,
    String sen = s3.getPass3().getPassword();
    String real = "abc";    
    
    
      if(sen.equals(real)){ //o erro acontece aqui, quando uso ==, dá erro também  
  
//tentei com String sen = new String(s3.getPass3().getPassword());   // Continua dando erro.     
            }
    {    
       MensagemP p = new MensagemP();    
       p.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);    
       p.setVisible(true);    
       setVisible(false);    
    
}     else        
    
    { MensagemS s = new MensagemS();    
      s.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);    
      s.setVisible(true);    
      setVisible(false);    
    }    
    
}
analins

Coloco abaixo um resumo das classe que uso.

Tento nesses códigos, simular as tela de senha de bancos financeiros (os Buttons exibem letras da senha )
Ao prescionar um Button, ele pega uma letra na primeira tela, outra letra na segunda tela e outra na terceira.
A primeira tela ao ler o digito prescionado por um button deve ser chamada automaticamente a segunda tela, o mesmo p/ 2a com a 3a.

public class SenhaS1 extends javax.swing.JFrame {// 1a tela


    public SenhaS1() {
        initComponents();
    }


public JPasswordField getPass1() { 
      return jPasswordField1;
   }
    
    private void initComponents() {

    private void button8ActionPerformed(java.awt.event.ActionEvent evt) {                                        
         valorB("a");  
    }                                       
    private void button7ActionPerformed(java.awt.event.ActionEvent evt) {                                        
         valorB("d");  

    }                                       
//o mesmo para os outros buttons   [...]
                              

//o objetivo aqui é: ao ser pressionado um button (ele deve ser lido e a próxima tela deve ser chamada 
//para ler o outro valor.       Esse mesmo método repito nas outras 2 classes


    private void jPasswordField1ActionPerformed(java.awt.event.ActionEvent evt) {                                                
        char[] seq1 = jPasswordField1.getPassword();
           if (seq1!=null) {     // ver se caracter dif de nulo, caso verdadeiro chama a 2a tela, funciona???

               SenhaS2 ss2 = new SenhaS2();
               ss2.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);
               ss2.setVisible(true);
               setVisible(false); }

                                 }                                               

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SenhaSequencia1().setVisible(true);
            }
        });
    }

    private javax.swing.JPasswordField jPasswordField1;


   private void valorB(String letra1){ //atribui valor ao button

      jPasswordField1.setText(valor);
    }          
}
public class SenhaS2 extends javax.swing.JFrame { //2a tela


    public SenhaS2() {
        initComponents();
    }


public JPasswordField getPass2() {  
      return jPasswordField2;
   }

 private void button1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       valorBotao("b"); 
}     //    [...]


private void valorBotao(String letra2){
   
     SenhaS1 ss1 = new SenhaS1();
     char[]letra1 = ss1.getPass1().getPassword(); //pega o valor digitado em SenhaS1
     jPasswordField2.setText(new String (letra1)+ letra2); //adiciona as 2 letras e imprime na tela, correto???
    }    //ou seja é lido 1 digito do button, mas impresso 3 no JPawordField
}
public class SenhaS3 extends javax.swing.JFrame {//3a tela


    public SenhaS3() {
        initComponents();
    }


public JPasswordField getPass3() {  
      return jPasswordField3;
   }

 private void button1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       valorBotao("c"); 
}     //    [...]


private void valorBotao(String letra3){
   
    SenhaS1 ss1 = new SenhaS1();
    char[]letra1 = ss1.getPass1().getPassword(); //pega o valor digitado em SenhaS1
    jPasswordField2.setText(new String (letras)+ letra3); //adiciona as 2 letras e imprime na tela, correto???
    }   //ou seja é lido 1 digito do button, mas impresso 3 no JPawordField
}
public class TelaConf extends javax.swing.JFrame {//Comparo a senha      
      
    public TelaConf() {      
        initComponents();      
    }      
        
    SenhaC s3 = new SenhaC();     
     
  // char[] sen = s3.getPass3().getPassword();       
   
    String sen = s3.getPass3().getPassword();//dá erro  
    String real = "abc";      
      
      
      if(sen.equals(real)){ //o erro acontece aqui, quando uso ==, dá erro também    
    
//tentei com String sen = new String(s3.getPass3().getPassword());   // Continua dando erro.       
            }  
    {      
       MensagemP p = new MensagemP();      
       p.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);      
       p.setVisible(true);      
       setVisible(false);      
      
}     else          
      
    { MensagemS s = new MensagemS();      
      s.setDefaultCloseOperation(javax.swing.JFrame.HIDE_ON_CLOSE);      
      s.setVisible(true);      
      setVisible(false);      
    }      
      
}
R

Para comparar um char[] com uma String, crie uma nova String com o conteúdo do char[] (a classe String provê um construtor para isso) e em seguida compare a nova String à String de referência com o método equals().

adrian.gois

Seja mais objetiva… Mostre o erro que está dando… fica dificil te ajudar… E mostra tbm o codigo de class SenhaC

M

posta o stack trace

Criado 21 de setembro de 2011
Ultima resposta 22 de set. de 2011
Respostas 8
Participantes 6