Tenho esse método buscar abaixo que tem que ler um arquivo e de acordo com a busca retorna em uma tabela os dados para o usuário. O parâmetro tipoBusca e porque tenho 3 radiobuttons na minha tela (nome,idade,sexo) o usuário seleciona se quer buscar por nome, idade ou sexo. Estou com um bug de quando o usuário seleciona buscar por idade ou sexo a minha tabela só apresenta a última pessoa que foi adicionada com aquele sexo ou idade e apresenta a mesma informação 2 vezes. Alguém sabe o que pode ser ?
Poste seu código e não imagens
Olha, pra ser sincero não reproduzi seu código, mas analisando ele vejo o seguinte problema:
O seu objeto Pessoa na linha 34 da 1a imagem está sendo criado fora do Loop.
Portanto o que acontece com o seu código é o seguinte:
- Vc seta uma pessoa (Ex.: Joao).
- Vc adiciona o Joao na lista.
- Na próxima vez que o loop rodar vc está alterando o mesmo objeto que já foi adicionado na lista (ex.: Maria). Mesmo que o objeto Pessoa (Joao) já tenha sido adiiconado na lista vc está alterando o mesmo objeto (setando o nome para Maria).
- Por fim, vc vai e adiciona o mesmo objeto novamente na lista (Maria 2x).
Como o Java trabalha com referência de objetos, mesmo vc já tendo adicionado ele na lista, quando vc der um set e alterar a proriedade dele automaticamente o Java vai alterar referência desse objeto.
Altere a linha Pessoa p = new Pessoa() para dentro do while.
Boas práticas:
Apenas um comentário a mais, é comum vc utilizar interface ao invés de usar a classe de implementação.
Exemplo atual:
ArrayList dados = new ArrayList();
Boa prática:
List dados = new ArrayList();
Sendo assim, vc usa todos os métodos da interface (List) ao invés de usar o método de implementação (ArrayList).
No seu caso não muda em nada o funcionamento do código, porém, a “interface” é o contrato de uso (Orientação a Objeto) e quando estamos passando um parâmetro ou recebendo, é mais comum recebermos essa interface, pois mesmo que a implementação mude, vc ainda tem certeza de que o sua interface (contrato) continuará intacta.
Não sei se expliquei bem, mas qualquer coisa da uma pesquisada sobre isso.
Espero ter ajudado.
Boa sorte.
Ajudou sim. Obrigado


