Bom dia galera, estou com uma duvida simples, ao imprimir uma lista de objetos ele ta repetindo os dados do ultimo objeto em todos os indices do Arraylist, segue abaixo o codigo resumido:
meu objeto a ser impresso
import java.util.ArrayList;
public class Usuario {
String nome;
String sobreNome;
public String toString(){
return nome+" "+sobreNome;
}
}
minha classe que imprime a lista de objetos
import java.util.ArrayList;
import java.util.Scanner;
public class TesteUsuario {
public static void main(String[] args) {
Usuario usuario=new Usuario();
Scanner entrada=new Scanner(System.in);
ArrayList<Usuario> lista=new ArrayList<Usuario>();
System.out.print("digite o nome: ");
usuario.nome=entrada.next();
System.out.print("digite sobrenome: ");
usuario.sobreNome=entrada.next();
lista.add(usuario);
System.out.print("digite o nome: ");
usuario.nome=entrada.next();
System.out.print("digite sobrenome: ");
usuario.sobreNome=entrada.next();
lista.add(usuario);
System.out.println(lista);
}
}
Lembre-se que a lista armazena uma referência e não um objeto.
Da forma que estás fazendo tu tens duas posicoes da lista referenciando o mesmo objeto, por isso sempre vai repetir os dados que foram informados por último.
É só observar que tu só tem um new Usuario(), logo tu não tens dois objetos, estás simplesmente alterando o mesmo.
Acredito que a resposta do sgaothaich está correta!
dessu lembre-se que você está trabalhando com uma ArrayList mas não está criando dois objetos! Pois você está adicionando duas vezes o mesmo objeto na array e modificando os atributos desse objeto nas duas vezes, portanto tua arraylist vai ter index 2 e os dados dos dois objetos serão os mesmos, pois o que vale é o último.
O que você pode fazer é criar dois parametros para o construtor da classe Usuario, nome e sobrenome, e setar eles na construção dessa tua classe, então cada objeto tu terás diferentes valores para os atributos!