1
resposta

Agenda de contatos

public class Contato {
    private String nome;
    private String numero;

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

    public String getNome() {
        return nome;
    }

    public String getNumero() {
        return numero;
    }

    @Override
    public String toString() {
        return nome + " - " + numero;
    }
}
import java.util.ArrayList;

public class Exercicios {
    public static void main(String[] args) {
        ArrayList<Contato> contatos = new ArrayList<>();

        contatos.add(new Contato("Bernardo Soares", "(11) 99999-9999"));
        contatos.add(new Contato("Luana Pereira", "(21) 99121-5555"));
        contatos.add(new Contato("Yasmin Varela", "(61) 99985-9798"));

        for (int i = 0; i < contatos.size(); i++) {
            System.out.println((i + 1) + ". " + contatos.get(i));
        }
    }
}
1 resposta

Olá, Bernardo. Como vai?

Parabéns pela resolução da atividade! O seu código está simplesmente fantástico e demonstra uma evolução muito legal desde o último exercício de encapsulamento.

Desta vez, você aplicou o conceito de maneira perfeita:

  • Atributos privados: O uso do modificador private em nome e numero garantiu a proteção correta dos dados da classe Contato.
  • Uso correto do toString(): Sobrescrever o método @Override public String toString() foi uma decisão excelente. Isso limpou o código do seu método main, permitindo que ao chamar contatos.get(i) o Java já entenda exatamente o formato de texto que deve imprimir.
  • Manipulação de Coleções: A utilização do ArrayList com tipo genérico <Contato> e a lógica do laço for estruturaram muito bem a listagem da agenda.

Para agregar ainda mais valor ao seu código e trazer boas práticas adotadas pelo mercado de desenvolvimento Java, deixo duas sugestões bem bacanas:

1. Programar voltado para Interfaces

No Java, quando utilizamos coleções como o ArrayList, é uma convenção muito forte declarar a variável utilizando a interface mais genérica (no caso, List), importada de java.util.List. Isso traz flexibilidade ao código, pois se no futuro você decidir mudar de ArrayList para LinkedList, só precisará alterar o lado direito da atribuição.

Veja como fica a linha modificada:

// Boa prática de mercado: declarar como List e instanciar como ArrayList
List<Contato> contatos = new ArrayList<>();

2. Explorando o laço For-Each ou Streams (Opcional)

Como o seu objetivo no for foi exibir os números ordenados de 1 até 3, a sua lógica com o contador (i + 1) ficou excelente. Caso o foco do relatório fosse apenas listar os contatos sem a numeração na frente, o Java possui uma sintaxe muito mais limpa chamada For-Each, que dispensa a necessidade de usar índices:

// Exemplo de iteração mais limpa (caso não precise exibir o número "1.", "2.", etc.)
for (Contato contato : contatos) {
    System.out.println(contato);
}

O seu código cumpre com maestria o objetivo do desafio e os pilares de um código encapsulado e bem estruturado.

Continue com esse ótimo ritmo de prática e estudos!

Espero que possa ter lhe ajudado!