Ajuda para otimizar um for

Boa tarde, estou com um problema em uma parte da minha aplicação. é um array list , pecorro ele usando um for, para encontrar um usuário que está na lista, comparando nome e senha, mas quando passa para o 2° elemento ou outro em diante, o aparece que a senha está errada, vou postar o codigo que fica mais facil de entender.

[code] String nomeProfessor=jTextField1.getText();
String senhaProfessor = new String(jPasswordField1.getPassword());

     for(int i=0;i<telaAnterior.getTelaAnterior().getDiretor().getLista_professor().size();i++)
     {
     
     if(nomeProfessor.equalsIgnoreCase(telaAnterior.getTelaAnterior().getDiretor().getLista_professor().get(i).getNome())&&
             senhaProfessor.equals(telaAnterior.getTelaAnterior().getDiretor().getLista_professor().get(i).getSenha()))
  {
       serieProfessor=telaAnterior.getTelaAnterior().getDiretor().getLista_professor().get(i).getTurma();
      JOptionPane.showMessageDialog(null, " LOGIN REALIZADO COM SUCESSO " ); 
      telaAnterior.getMenuProfessor().setVisible(true);
     this.setVisible(false);
  
     // telaAnterior.setVisible(false);
      
  }
     
     else
     
     { // corrigir isso, quando da um loop da a msg errada, tentar otimizar o for 
   
   
    JOptionPane.showMessageDialog(null, "senha errada, tente novamente ");
   this.setEnabled(true);
  
     
     }      
     
     
     }
     
     [/code]

apenas 1 dos resultados do arrayList vai bater o usuario e senha correto?

então acredito que o loop esteja certo, voce precisa apenas dar um break na repeticao dentro do if que está ok para parar o loop caso encontre o resultado esperado

seria isso?

abraço

Eu coloquei o break, dentro do if, mas ainda aparece a msg JOptionPane.showMessageDialog(null, "senha errada, tente novamente "); , se o professor tiver indice 0 passar normal, mas se o indice for maior que 0, o for recomeça e mostra a msg de senha errada…

Então não podes mandar a mensagem sempre que o que encontras não é o que queres mas apenas no fim, senão encontraste o que querias.

Não gosto de criticar nenhum código, mas como gosto de trabalhar muito com MVC :x Segue o meu ponto de vista.

[code]
private boolean verificarLogin(String nomeProfessor,String senhaProfessor ){

	for (Professor professor : telaAnterior.getTelaAnterior().getDiretor().getLista_professor()) {

		if (professor.getNome() && senhaProfessor.equals(professor.getSenha())) {
			serieProfessor = professor.getTurma();
			telaAnterior.getMenuProfessor().setVisible(true);
			this.setVisible(false);
			return true;
		}else{ 
			this.setEnabled(true);
			return false;
		}
		
	}
}

private void validarLogin(){
	if(verificarLogin(jTextField1.getText(), jPasswordField1.getPassword())){
		JOptionPane.showMessageDialog(null, " Login Realizado com Sucesso! " );
	}else{
		JOptionPane.showMessageDialog(null, "Usuário ou Senha Inválida! ");  
	}	
}
[/code]

crie uma variavel booleana chamada teste por exemplo com o padrao true

caso entre no if que voce quer, voce nao mexe nela e da o break normal,

no else voce atribui false a ela e deixa correr,

caso percorra todos os registros e nao encontre nada, a condicao estara setada para false, porem nenhuma mensagem vai aparecer, o que voce faz dai?

cria um if fora do else, e caso teste seja false, exiba a mensagem

abraço

[quote=ddenis3526]Não gosto de criticar nenhum código, mas como gosto de trabalhar muito com MVC :x Segue o meu ponto de vista.

[code]
private boolean verificarLogin(String nomeProfessor,String senhaProfessor ){

	for (Professor professor : telaAnterior.getTelaAnterior().getDiretor().getLista_professor()) {

		if (professor.getNome() && senhaProfessor.equals(professor.getSenha())) {
			serieProfessor = professor.getTurma();
			telaAnterior.getMenuProfessor().setVisible(true);
			this.setVisible(false);
			return true;
		}else{ 
			this.setEnabled(true);
			return false;
		}
		
	}
}

private void validarLogin(){
	if(verificarLogin(jTextField1.getText(), jPasswordField1.getPassword())){
		JOptionPane.showMessageDialog(null, " Login Realizado com Sucesso! " );
	}else{
		JOptionPane.showMessageDialog(null, "Usuário ou Senha Inválida! ");  
	}	
}
[/code][/quote]

E fica mais fácil de entender o código, uma vez eu apreendi que quando vc programa e o seu código fica cada vez mais parecido como um livro é que o código realmente está ficando bom ^^

Mas como ficaria se o usuário digitasse a senha errada? [quote]
Então não podes mandar a mensagem sempre que o que encontras não é o que queres mas apenas no fim, senão encontraste o que querias.[/quote]

[quote=Sg5001]Mas como ficaria se o usuário digitasse a senha errada? [quote]
Então não podes mandar a mensagem sempre que o que encontras não é o que queres mas apenas no fim, senão encontraste o que querias.[/quote][/quote]

Olha o código que mandei como resposta. Acho que tira a suas duvidas.

Cara tem um problema com o codigo que você mandou, ele só verifica o primeiro professor, se cadastrar outro ele não verifica e mostra que a senha está errada…

[code]private boolean verificarLogin(String nomeProfessor,String senhaProfessor ){

    for (Professor professor : telaAnterior.getTelaAnterior().getDiretor().getLista_professor()) {  

        if (professor.getNome() && senhaProfessor.equals(professor.getSenha())) {  
            serieProfessor = professor.getTurma();  
            telaAnterior.getMenuProfessor().setVisible(true);  
            this.setVisible(false);  
            return true;  
        }
          
    }  
}  
  
private void validarLogin(){  
    if(verificarLogin(jTextField1.getText(), jPasswordField1.getPassword())){  
        JOptionPane.showMessageDialog(null, " Login Realizado com Sucesso! " );  
    }else{  
        JOptionPane.showMessageDialog(null, "Usuário ou Senha Inválida! ");
		this.setEnabled(true);  			
    }     
}  
  [/code]

n tinha reparado x.x" só tinha ajustado.

como faz? :slight_smile:

[code]private boolean verificarLogin(String nomeProfessor,String senhaProfessor ){

    for (Professor professor : telaAnterior.getTelaAnterior().getDiretor().getLista_professor()) {    

        if (professor.getNome() && senhaProfessor.equals(professor.getSenha())) {    
            serieProfessor = professor.getTurma();    
            telaAnterior.getMenuProfessor().setVisible(true);    
            this.setVisible(false);    
            return true;    
        }  
            
    }    
}    
    
private void validarLogin(){    
    if(verificarLogin(jTextField1.getText(), jPasswordField1.getPassword())){    
        JOptionPane.showMessageDialog(null, " Login Realizado com Sucesso! " );    
    }else{    
        JOptionPane.showMessageDialog(null, "Usuário ou Senha Inválida! ");  
        this.setEnabled(true);                
    }       
}    
  [/code]