[RESOLVIDO] imprimir um ArrayList de um objeto

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);
	}
}

valeu :slight_smile:

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!

[code] Usuario usuario;
Scanner entrada=new Scanner(System.in);
String nome, sobrenome;
ArrayList lista=new ArrayList();

    System.out.print("digite o nome: ");  
    nome=entrada.next();  
    System.out.print("digite sobrenome: ");  
    sobrenome=entrada.next();  
    lista.add(new Usuario(nome, sobrenome););  
      
    System.out.print("digite o nome: ");  
    nome=entrada.next();  
    System.out.print("digite sobrenome: ");  
    sobrenome=entrada.next();  
    lista.add(new Usuario(nome, sobrenome););  

System.out.println(lista);
[/code]

Espero que ajude!

Abraço,

Tenta fazer algo assim

 Usuario usuario;  
          Scanner entrada=new Scanner(System.in);  
          String nome, sobrenome;
          ArrayList&lt;Usuario&gt; lista=new ArrayList&lt;Usuario&gt;();  
          
        System.out.print("digite o nome: ");  
        nome=entrada.next();  
        System.out.print("digite sobrenome: ");  
        sobrenome=entrada.next();  
        lista.add(new Usuario(nome, sobrenome););  
          
        System.out.print("digite o nome: ");  
        nome=entrada.next();  
        System.out.print("digite sobrenome: ");  
        sobrenome=entrada.next();  
        lista.add(new Usuario(nome, sobrenome););  

       for (Usuario u : lista) {
         System.out.println(u);  // imprimi o que toString() retornar
      }

Boa sorte

Galera eu vi a cagada q eu tava fazendo, deu certo, valeu msm :slight_smile: