ArrayList Java

Pessoal, estou com dúvidas num exercício no qual eu tenho que adicionar o nome e telefone de um usuário numa ArrayList, eu tentei fazer, porém cada usuário que eu adiciono é adicionado na mesma lista, e eu gostaria de saber como eu poderia fazer para deixar apenas uma lista para cada usuário.

Output do meu programa:

1. Cadastrar Novo Contato
2. Pesquisar Contato
3. Excluir Contato
4. Sair

Sua opção: 1
Nome: João
Telefone: 99999-9999
E-mail: joao@gmail.com
Aniversário: 01/01/2020
[João, 99999-9999, joao@gmail.com, 01/01/2020]

1. Cadastrar Novo Contato
2. Pesquisar Contato
3. Excluir Contato
4. Sair
Sua opção: 1
Nome: Pedro
Telefone: 98888-8888
E-mail: pedro@gmail.com
Aniversário: 01/01/2000
**[João, 99999-9999, joao@gmail.com, 01/01/2020, Pedro, 98888-8888, pedro@gmail.com, 01/01/2000]**

Nessa última linha, ambos usuários estão na mesma lista, e eu gostaria de saber como eu poderia fazer uma lista para cada usuário:
[João, 99999-9999, joao@gmail.com, 01/01/2020]
[Pedro, 98888-8888, pedro@gmail.com, 01/01/2000]

Baseado em que esses valores serão enviados pelo usuário que estiver utilizando meu programa, ou seja, não posso criar 2 listas com os valores já “pré-definidos”.

Aqui estão as classes que eu estou utilizando

Contato.class


public class Contato {
  // Atributos da classe Contato
  private int id;
  private String nome;
  private String telefone;
  private String email;  
  private String aniversario;
  
  public int getID() {
    return id;
  }
  public void setID(int id) {
    this.id = id;
  }
  
  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;
  }
  
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }

  public String getAniversario() {
    return aniversario;
  }
  public void setAniversario(String aniversario) {
    this.aniversario = aniversario;
  }
  
  public Contato(String nome, String telefone) {
    this.id = 0;
    this.nome = nome;
    this.telefone = telefone;
    this.email = "E-mail não informado";
    this.aniversario = "Data de aniversário não informada";
  }
}

Agenda.class

import java.util.Scanner;
import java.util.ArrayList;
 
public class Agenda{
  public static void main(String args[]){
    Scanner entrada = new Scanner(System.in);
    String id, nome, telefone, email, aniversario;
    ArrayList<String> contatos = new ArrayList<String>();
     
    Agenda agenda = new Agenda();
     
    while(true){
      System.out.println("\n1. Cadastrar Novo Contato");
      System.out.println("2. Pesquisar Contato");
      System.out.println("3. Excluir Contato");
      System.out.println("4. Sair");
      System.out.print("Sua opção: ");
      int opcao = Integer.parseInt(entrada.nextLine());
       
      switch(opcao){
        case 1:
          System.out.print("Nome: ");
          nome = entrada.nextLine();
          System.out.print("Telefone: ");
          telefone = entrada.nextLine();
          System.out.print("E-mail: ");
          email = entrada.nextLine();
          System.out.print("Aniversário: ");
          aniversario = entrada.nextLine();

          contatos.add(nome);
          contatos.add(telefone);
          contatos.add(email);
          contatos.add(aniversario);
          
          System.out.print(contatos);
          break;
      }
    }
  }
} 

O teu problema é que não estás a usar a class Contato.
Criaste a classe mas depois a tua agenda tem uma lista de String em vez de lista de Contato

    ArrayList<Contato> contatos = new ArrayList<>();
    (...)     
  
     switch(opcao){
       case 1:
         System.out.print("Nome: ");
         nome = entrada.nextLine();
         System.out.print("Telefone: ");
         telefone = entrada.nextLine();
         Contato novoContato = new Contato(nome, telefone); // porque só estes no construtor?
         System.out.print("E-mail: ");
         email = entrada.nextLine();
         novoContato.setEmail(email);
         System.out.print("Aniversário: ");
         aniversario = entrada.nextLine();
         novoContato.setAniversario(aniversario);

         contatos.add(novoContato);

   (...)

Há outros detalhes que podem ser melhorados, como separar a lógica em métodos em vez de ter tudo no main.

1 curtida

Eu só não entendi como eu poderia imprimir cada lista se eu utilizasse essa classe, já que ela não é uma string, quando eu tento dar um print do array ele imprime o nome do objeto seguido de vários números, tentei fazer a conversão do array para string, mas tive dificuldades também, os exemplos que eu tinha visto na internet utilizava a lista como string e depois utilizava apenas o System.out.print(contatos); para imprimir os itens do array…

Tens de implementar o toString na tua classe Contato e ele vai imprimir o que lá colocares.

public String toString() {
     return "Contacto " + id + " [Nome: "  + nome + ", telefone: " + telefone + ", email: " + email + ", aniversario: " + aniversario + "]";
}