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(inti=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!!!");}
}
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(inti=0;i<pessoas.size();i++){for(intj=0;j<i;j++){//Verifiqueseapessoa[i]écasadacomapessoa[j].//Sefor,ésósairdolaçocomocomando[continue].}if(pessoas.get(i).conjuge!=null){System.out.println(pessoas.get(i).nome+" e "+pessoas.get(i).conjuge.nome+" são casados!!!");}}
A
andreaamado
Tentei mas não rolou, continua imprimindo repetido…
Tipo:
andrea x alex
alex x andrea
for(inti=0; i < pessoas.size(); i++) { //seapessoaforcasadaif(pessoas.get(i).conjuge!=null){
for(intj=0; j < 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
andreaamado
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
andreaamado
não, é o identificador mesmo.
protectedPessoaconjuge;protectedList<Pessoa> exconj = new ArrayList<Pessoa>();for(inti=0; i < pessoas.size(); i++) {//seapessoaforcasadaif(pessoas.get(i).conjuge!=null){
for(intj=0; j < 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
andreaamado
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
roger_rf
for(inti=0; i < pessoas.size(); i++) { //seapessoaforcasadaif(pessoas.get(i).conjuge!=null){booleanachouConjuge=false;for(intj=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
andreaamado
foi sim roger, eu tinha esquecido do continue;
muito obrigado.