[RESOLVIDO] imprimir um ArrayList de um objeto

4 respostas
D

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:

4 Respostas

S

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.

F

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!

Usuario usuario;  
          Scanner entrada=new Scanner(System.in);  
          String nome, sobrenome;
          ArrayList<Usuario> lista=new ArrayList<Usuario>();  
          
        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);

Espero que ajude!

Abraço,

M

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

D

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

Criado 26 de novembro de 2011
Ultima resposta 27 de nov. de 2011
Respostas 4
Participantes 4