Duvida sobre Arraylist

4 respostas
I

To começando a programar com O.O a poucos dias e meu professor falou assim: "Gente, quem sabe pode usar arraylist tranquilo, mas quem não sabe se vire com array". Ele só vai explicar Arraylist em algumas aulas, então resolvi tentar.

Como faço para adicionar um item na posição x da arraylist?

Olhem meu codigo besta, que simplesmente vai cadastrar nome e telefone quantas vezes a pessoa quiser e depois imprimir (simples, somente pra aprender).

Classe Pessoa
import javax.swing.JOptionPane;
import java.util.*;

public class Pessoa {

	// Atributos
	private String nome;
	private String telefone;
	
	// Construtor
	public Pessoa() {
		this.setNome("0");
		this.setTelefone("0");
	}

	// metodos
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	
	//Metodo para impressão
	public String toString() {
		return "Nome: "+this.getNome()+ "\nTelefone: "+this.getTelefone();
	}
	
	//Metodo para cadastrar e atribuir valor na ArrayList.
	public void cadastrar(int contador, Pessoa p, List l) {
		int n=1;
		int posicao=0;
		while(n <= contador) {
			this.setNome(JOptionPane.showInputDialog(null, "Informe o nome : "));
			this.setTelefone(JOptionPane.showInputDialog(null, "Informe o Telefone : "));
			l.add(posicao, p);
			n++;
			posicao++;
		}
	}

}
Classe Main..
import java.util.*;

public class Main {
	
	public static void main(String[] args) {
		
		Pessoa p = new Pessoa(); //Criação do objeto
		
		List<Pessoa> lista = new ArrayList<Pessoa>(); //Criação da ArrayList
		
		p.cadastrar(5, p, lista); //Chama metodo cadastrar
		
		for (int i=0; i<lista.size(); i++) {
		System.out.println(lista.get(i).toString()); //Imprime chamando metodo toString()
		}
		

	}

}

Quando eu executo o codigo, ta imprimindo 'n' vezes somente o ultimo nome/telefone digitado =/. Alguem sabe aonde esta o erro?

Abraçoss!!

4 Respostas

luciano2

O list recebe o elemento por referencia.

Se você preenche um objeto e adiciona no list e depois altera o valor do objeto você também altera o valor do objeto dentro da lista.

se você usar o add duas vezes para o mesmo objeto você terá duas referências para o mesmo objeto.

Tente fazer

list.add§;

p = new Pessoa()

dessa forma resolve.

F

Um arrayList é um array de objetos, no seu caso um array de pessoa.
Vc não precisa definir a posição em que o objeto vai ficar quando adicionar em uma ArrayList.

Segue

public class Pessoa {  
  
    //Get e Set Omitidos
   // Atributos  
    private String nome;  
    private String telefone;  
      
    // Construtor  
    public Pessoa(String nome, String telefone) {  
        this.nome = nome;  
        this.telefone = telefone;  
    }  
  
      
   //Metodo para impressão  
    public String toString() {  
        return "Nome: "+this.getNome()+ "\nTelefone: "+this.getTelefone();  
    }  
      
  
}

public class Main {  
      
    public static void main(String[] args) {  
          
        Pessoa p = new Pessoa(); //Criação do objeto  
          
        List<Pessoa> lista = new ArrayList<Pessoa>(); //Criação da ArrayList  
          
        lista.add(new Pessoa("nome", "telefone"))
        lista.add(new Pessoa("nome1","telefone1"))

         
// exibe os valores da lista
    for(int i = 0; i < lista.size(); i++)
 
       //Aqui vc pode fazer um cast de cada objeto e trabalhar com suas propriedades ou utilizar o toString
         p = (Pessoa) lista.get(i) 
        System.out.println(p.toString())

  }

  
    }
arqueiros

Quando eu executo o codigo, ta imprimindo ‘n’ vezes somente o ultimo nome/telefone digitado =/. Alguem sabe aonde esta o erro?

Está aparecendo somente o ultimo por que vc criou apenas um objeto pessoa e está apenas mudando o nome dele perdendo o nome/telefone que estavam antes…

Se ao invés de usar o this e setar o nome/telefone vc deveria criar um novo objeto para cada nome/telefone que digitar e adicionar no arraylist usando o método add…

Ok? :smiley: precisando de algo eh soh falar

I

Valew, resolvido =DD

Criado 30 de abril de 2010
Ultima resposta 30 de abr. de 2010
Respostas 4
Participantes 4