Ajuda para otimizar um for

13 respostas
S

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.

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);
      
         
         }      
         
         
         }

13 Respostas

fabiozanardi

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

S

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…

pmlm

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.

ddenis3526

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

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! ");  
		}	
	}
fabiozanardi

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

ddenis3526
ddenis3526:
Não gosto de criticar nenhum código, mas como gosto de trabalhar muito com MVC :x Segue o meu ponto de vista.
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! ");  
		}	
	}

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 ^^

S

Mas como ficaria se o usuário digitasse a 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.

ddenis3526

Sg5001:
Mas como ficaria se o usuário digitasse a 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.

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

S

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…

ddenis3526
Sg5001:
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...
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);  			
        }     
    }
ddenis3526

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

S

como faz? :slight_smile:

ddenis3526
Sg5001:
como faz? :)
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);                
        }       
    }
Criado 29 de outubro de 2012
Ultima resposta 29 de out. de 2012
Respostas 13
Participantes 4