Comparar key de uma array list

10 respostas
A

Comecei a aprender java tem algumas semanas, e minha dúvida é bem idiota, mas não consegui resolver.

Eu tenho uma arrayList com os dados de algumas pessoas e um dos dados é se a pessoa é casada.

Quero imprimir a arrayList com todas as pessoas casadas, mas preciso verificar se o conjuge já foi listado, caso contrario a pessoa é listada duas vezes, pq lista ela e depois lista ela novamente por ser conjuge da primeira pessoa listada.

fiz um loop mas não consegui fazer a verificação na arrayList:

for (int i = 0; i < pessoas.size(); i++) {
	if (pessoas.get(i).conjuge != null) {
		System.out.println(pessoas.get(i).nome + " e " + pessoas.get(i).conjuge.nome + " são casados!!!");
	}
}

Alguém pode me ajudar?

10 Respostas

R

Não é uma dúvida idiota, não se cobre tanto enquanto está aprendendo. Mas, sobre a sua pergunta, você pode percorrer a lista novamente para cada pessoa para checar se já foi listada:

for (int i = 0; i < pessoas.size(); i++) {
  for (int j = 0; j < i; j++) {
    // Verifique se a pessoa [i] é casada com a pessoa [j].
    // Se for, é  sair do laço com o comando [continue].
  }

  if (pessoas.get(i).conjuge != null) {  
    System.out.println(pessoas.get(i).nome + " e " + pessoas.get(i).conjuge.nome + " são casados!!!");  
  } 
}
A

Tentei mas não rolou, continua imprimindo repetido…
Tipo:
andrea x alex
alex x andrea

for (int i = 0; i &lt; pessoas.size(); i++) {	
	// se a pessoa for casada
	if (pessoas.get(i).conjuge != null) {
		  for (int j = 0; j &lt; pessoas.size(); j++) {  
			 if (pessoas.get(i).conjuge == pessoas.get(j)) {
				  continue;
			  }
		  }
		  System.out.println(pessoas.get(i).nome + " e " + pessoas.get(i).conjuge.nome + " são casados!!!");    
	}
}
luxu

axo q são 2 for´s( um q percorre o array principal e outro q percorre o mesmo array mas procurando por um conjuge igual) lembrando q pra comparar string é conjuge.equal(“Pedro”); saka?

A

então luxu, foi isso mesmo que o roger disse pra fazer, eu fiz mas não comparei o nome e sim o identificador da chave.
não rolou.

luxu

o conjuge é uma string? se for tem q comparar ele naum a chave.

A

não, é o identificador mesmo.

protected Pessoa conjuge;
protected List&lt;Pessoa&gt; exconj = new ArrayList&lt;Pessoa&gt;();

for (int i = 0; i &lt; pessoas.size(); i++) {

	// se a pessoa for casada
	if (pessoas.get(i).conjuge != null) {
		for (int j = 0; j &lt; pessoas.size(); j++) {
			if (pessoas.get(i).conjuge == pessoas.get(j)) {
				continue;
			}
		}

		System.out.println(pessoas.get(i).nome + " e " + pessoas.get(i).conjuge.nome + " são casados!!!");
	}

}
luxu

pra garantir naum ter conjuge repetidos, use o HashMap ao invés do ArrayList pq ele garante naum ter chaves repetidas na lista, daí vc nem precisa fazer nada…v se ajuda!!

A

não tem chave repetida, é tipo assim: andrea é casada com alex, então obviamente alex é casado com andrea, mas os dois estão na lista, pq cada linha corresponde a um deles, uma linha é da andrea e mostra o conjuge de dela e a outra linha é do alex e mostra o conjuge dele, isso está certo mas na hora de imprimir repete, pois fica andrea é casada com alex e em outra linha alex é casado com andrea, entende?
eu só preciso filtrar na hora de imprimir, entendeu?

R
for (int i = 0; i < pessoas.size(); i++) {     
    // se a pessoa for casada  
    if (pessoas.get(i).conjuge != null) {  
          boolean achouConjuge = false;
          for (int j = 0; j < i; j++) {    
             if (pessoas.get(i).conjuge == pessoas.get(j)) {  
                  achouConjuge = true;
                  break;  
              }  
          }  
          if (achouConjuge) continue;
          System.out.println(pessoas.get(i).nome + " e " + pessoas.get(i).conjuge.nome + " são casados!!!");      
    }  
}
A

foi sim roger, eu tinha esquecido do continue;
:smiley:
muito obrigado.

Criado 24 de setembro de 2011
Ultima resposta 25 de set. de 2011
Respostas 10
Participantes 3