Problemas com ArrayList

8 respostas
R

criei um ArrayList de usuarios.... ele grava objetos de um tipo usuario.
Bem, gostaria de saber como faço para recuperar cada objeto deste e testar se encontrei um usuario específico.

tipo: tentei fazer isso mais não funcionou.... cada usuario tem seus metodos getnome() e getsenha()

boolean validauser(String nome, String senha){
     Object user;
      int i = 0;
 
      while ((user = usuarios.get(i)) != null){
                  i++;

          /* deveria testar se o objeto retornado é o usuario que eu quero usuando os metodos getnome() e getsenha() */ 
           
      }
      //e retornar verdadeiro ou falso se achou o cara.
  }

to aprendendo java agora e percebi que isso vai ser um pouco mais dificil que eu imaginei....

Desde já agradeço, e fico no aguardo!

8 Respostas

A

Ola Raimundo…

para vc percorrer um ArrayList vc deve criar o Iterator…

public boolean validaUser(String nome, String senha){
   List users = getUsers(); //método q vai retornar o ArrayList dos usuários cadastrados
   Iterator it = users.iterator();
   while ( it.hasNext() ){
      Usuario user = (Usuario) it.next();
      if ( user.getNome().equals( nome ) && user.getSenha().equals( senha ) {
         return true; //usuario válido
      }
   }
   return false
}

[]'s

R

Valeu cara!!!

ah, só mais uma dúvida...

qual dessas maneiras esta correta ou qual seria a correta para se utilizar coleções??? tipo... quero criar um TreeSet (mercados) de objetos do tipo mercado e cada um desses mercados tem um TreeSet de produtos

como faço para colocar esses objetos no TreeSet e depois recuperar??

tipo.:
(...)
          TreeSet mercados = new TreeSet();
           
          Mercado m1 = new Mercado("nome do mercado");
          mercados.add(m1);

          //ou

          mercados.add(new Mercado(nome));
        (...)

lembrando que podem haver N mercados durante a execução do programa...

e como faço para poder recuperar esses mecados e utiliza-los normalmente???????

muito Obrigado!

R

surgiu mais um probleminha…

no teu codigo tem:

while(it.hasNext()){
         Usuario user = (Usuario) it.next();
       }

…me lembrei que esse arraylist contem objetos cliente e Administrador…

qual seria a melhor solução? acho que não da pra saber qual o obj que está em it.next() para poder especificar se é Administrador ou cliente não é??? =/

Cara, desculpa ficar perturbando você…

Desde já agradeço!

A

Raimundo, tem q se desculpar naum kra…
estamos aí pra ajudar e ser ajudado…

seguinte:
Respondendo à primeira:

Eu naum sei te dizer se de um jeito ou do outro, vc vai consumir menos recursos da máquina, isso eu não sei (talvez alguém da lista saiba…)
Mas, das duas formas o resultado vai ser o mesmo, aí fica à seu critério qual escolher…

Quanto, à segunda pergunta, vc pode fazer desta forma para saber se o obj eh Administrador ou cliente:

while ( it.hasNext() ){ Object o = it.next(); if ( o instanceof Administrador ){ // É administrador }else if ( o instanceof Cliente ){ //É cliente }else{ //É outro obj } }

qlqr dúvida é só falar…

[]'s

_

Voce pode criar uma interface (exemplo Componente) que faz a assinaturas dos metodos de Cliente e Administrador, e altera o cabeçalho de Cliente e Administrador com “implements Componente” aí em vez de fazer:

while ( it.hasNext() ){

Object o = it.next();

if ( o instanceof Administrador ){

// É administrador

}else

if ( o instanceof Cliente ){

//É cliente

}else{

//É outro obj

}

}

você pode fazer:

while ( it.hasNext() ){

Componente o = (Componente)it.next();

// executa os comandos, pois utiliza polimorfismo entre Cliente e Administrador, e utiliza os mesmos métods em comum

}

void esperoTerAjudado()

S

Não entendi o porquê do Iterator.
Não basta fazer isso?

for (int i = 0; i < usuarios.size(); i++)
{
  Cliente c = (Cliente)usuarios.get(i);
  // ...
}
M

“Schuenemann”:
Não entendi o porquê do Iterator.
Não basta fazer isso?

for (int i = 0; i < usuarios.size(); i++) { Cliente c = (Cliente)usuarios.get(i); // ... }

Em java 1.5 é mais facil…

for(Client c : usuarios) {
      ...........
}
R

Valeu gente!!!

Deu certo, vcs são D+!

Muito obrigado! :razz:

Criado 9 de novembro de 2004
Ultima resposta 11 de nov. de 2004
Respostas 8
Participantes 5