Imprimir ArrayList

Galera, não consegui entender muito bem como funciona o Array na hora de imprimir.

[code]import java.util.List;
import java.util.ArrayList;

public class Contato{
private String nome;
private String tel;
List cont; //FAZ SENTIDO ESSA LINHA? (DECLARAÇÃO)

public Contato(String nome, String tel){
	this.nome = nome;
	this.tel = tel;
}

public void adiciona(Contato c){
	cont = new ArrayList<Contato>(); //E INSTANCIAR SOMENTE NESSA??
	cont.add(c);
}

public void imprime(){
	for (Contato contatos : cont){
		System.out.println ("Nome: " +nome+ "\nTelefone; " +tel+ "\n");
	}
}

}[/code]

[code]public class Agenda{
public static void main (String args[]){
Contato contato = new Contato (“Rafa”, “9111-2233”);
contato.adiciona(contato);

	Contato contato2 = new Contato ("Branca", "9111-5544");
	contato2.adiciona(contato2);

// VARIÁVEL QUE CHAMA O MÉTODO IMPRIME() ?? COMO??

}
}[/code]

Está correto essa maneira de adicionar os contatos que eu fiz ou dá pra melhorar?

O problema principal…como imprimir todos os contatos depois?
Criei um método que imprime, mas como fazer isso? Tentei declarar uma variável do tipo Contato e mandar imprimir mas não deu certo.

Valeu desde já.

Do jeito que vc fez…precisaria imprimir contatos.get(posição);

você instanciou Contato contatos que vai percorrer uma lista chamada cont

logo vc precisa imprimir valores de contato…imprimindo nome vc não faz referência a valor algum;…

Vc deve iterar a lista e atrilbuir novamente em objetos do tipo contato.
Depois printar da forma que quiser.

Olá!

Sim, essa linha faz sentido por 2 motivos:

:arrow: Você está declarando uma variável fora de todos os métodos (variável de instância) então todos os métodos dessa classe tem acesso à ela, assim como todas as instâncias dessa classe (a cada nova criação de um objeto - com a palavra-chave new) também terão uma cópia dessa variável;

:arrow: Você declarou como List e se precisar modificar a implementação por alguma outra classe que implementa List será muito mais fácil.

Aqui por exemplo se você resolver trocar ArrayList por Vector em uma possível modificação só precisará trocar essa linha do new ArrayList() por new Vector() já que as duas classes implementam List (Isso vale para TODAS as classes que implementam List).

// é só trocar essa linha...
cont = new ArrayList<Contato>();
// ...por essa (Vector ou qualquer outra classe que implemente List)
cont = new Vector<Contato>();

Você pode colocar o modificador static na variável cont, no método adiciona(Contato c) e no método imprime() pois não importa a instância ele sempre fará a impressão de TODOS os contatos. Dessa maneira mesma variável cont será compartilhada por todas as instâncias e qualquer modificação em uma instância afetará todas as outras. Daí é só chamar o método dessa maneira:

Contato.imprime();

A implementação de imprime está errada também. Crie métodos que retornem o nome e o telefone e ao invés de imprimir "Nome " + nome, faça "Nome " + cont.getNome();

Abraços

Sobre o método pra imprimir…

public void imprime(){ for (Contato contatos : cont){ System.out.println ("Nome: " +contatos.getNome()+ "Telefone: " +contatos.getTel()); } }

Agora como implementar isso na classe principal?

Olá!

Crie métodos get algo assim:

public String getNome(){
    return this.nome;
}

Abraços

[quote=Link_pg]Olá!

Crie métodos get algo assim:

public String getNome(){
    return this.nome;
}

Abraços[/quote]

Isso eu já tinha feito. Só não estou conseguindo implementar dentro do main agora.

O main é estatico, se vc quiser usar um metodo que não seja estatico, crie uma instancia da propria classe, ou declare os metodos tbm como estaticos.