Voltar para a lista

Exercício 1 — Associação (Java)

🧩 Exercício 1 — Associação simples

Tema: Sistema de alunos e endereços

Objetivo: Demonstrar o uso de associação entre duas classes independentes.

Enunciado:
Crie um sistema que relacione alunos e seus endereços. Cada aluno possui um nome e um número de matrícula, e pode estar associado a um endereço (rua, cidade, CEP). Tanto o aluno quanto o endereço podem existir separadamente — um endereço pode ser cadastrado antes de ser vinculado a um aluno. Implemente as classes Aluno e Endereco, instancie objetos no método main e mostre como associar um aluno a um endereço.

O programa principal (App.java) está pronto. Criar apenas as classes Endereco e Aluno nos respectivos arquivos Endereco.java e Aluno.java

💻 Código Java

// App.java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class App {
    private static final Scanner sc = new Scanner(System.in);
    private static final List<Aluno> alunos = new ArrayList<>();
    private static final List<Endereco> enderecos = new ArrayList<>();

    public static void main(String[] args) {
        int opcao;
        do {
            menu();
            opcao = lerInt("Escolha uma opção: ");

            switch (opcao) {
                case 1 -> cadastrarEndereco();
                case 2 -> cadastrarAluno();
                case 3 -> associarEnderecoAAluno();
                case 4 -> listarAlunos();
                case 5 -> listarEnderecos();
                case 0 -> System.out.println("Encerrando...");
                default -> System.out.println("Opção inválida!");
            }
            System.out.println();
        } while (opcao != 0);
    }

    // ====== UI ======
    private static void menu() {
        System.out.println("=== Sistema Alunos & Endereços (ASSOCIAÇÃO) ===");
        System.out.println("1) Cadastrar Endereço");
        System.out.println("2) Cadastrar Aluno");
        System.out.println("3) Associar Endereço a Aluno");
        System.out.println("4) Listar Alunos");
        System.out.println("5) Listar Endereços");
        System.out.println("0) Sair");
    }

    private static String ler(String msg) {
        System.out.print(msg);
        return sc.nextLine().trim();
    }

    private static int lerInt(String msg) {
        while (true) {
            try {
                System.out.print(msg);
                String s = sc.nextLine().trim();
                return Integer.parseInt(s);
            } catch (NumberFormatException e) {
                System.out.println("Digite um número inteiro válido.");
            }
        }
    }

    // ====== Operações ======
    private static void cadastrarEndereco() {
        System.out.println("--- Cadastrar Endereço ---");
        String rua = ler("Rua: ");
        String cidade = ler("Cidade: ");
        String cep = ler("CEP: ");
        Endereco e = new Endereco(rua, cidade, cep);
        enderecos.add(e);
        System.out.println("Endereço cadastrado: " + e);
    }

    private static void cadastrarAluno() {
        System.out.println("--- Cadastrar Aluno ---");
        String nome = ler("Nome: ");
        String matricula = ler("Matrícula: ");
        Aluno a = new Aluno(nome, matricula);
        alunos.add(a);
        System.out.println("Aluno cadastrado: " + a.getNome() + "(" + a.getMatricula() + ")");
    }

    private static void associarEnderecoAAluno() {
        if (alunos.isEmpty() || enderecos.isEmpty()) {
            System.out.println("Cadastre ao menos um aluno e um endereço antes de associar.");
            return;
        }

        System.out.println("--- Alunos ---");
        int i = 0;
        for (Aluno a : alunos) {
            System.out.print("("+i+") ");
            a.exibeAluno();
            System.out.println("----------------");
            i++;
        }
        int idxAluno = lerInt("Escolha o índice do aluno: ");
        if (idxAluno < 0 || idxAluno >= alunos.size()) {
            System.out.println("Índice de aluno inválido.");
            return;
        }

        System.out.println("--- Endereços ---");
        i = 0;
        for (Endereco e : enderecos) {
            System.out.print("("+i+") ");
            e.exibeEndereco();
            System.out.println("----------------");
            i++;
            
        }

        int idxEnd = lerInt("Escolha o índice do endereço: ");
        if (idxEnd < 0 || idxEnd >= enderecos.size()) {
            System.out.println("Índice de endereço inválido.");
            return;
        }

        Aluno a = alunos.get(idxAluno);
        Endereco e = enderecos.get(idxEnd);
        a.setEndereco(e); // Associação estabelecida
        System.out.println("Associação realizada! " + a.getNome() + " ("+a.getMatricula()+") agora está associado a: " + e.getRua() + ", " + e.getCidade() + " - CEP " + e.getCep());
    }

    private static void listarAlunos() {
        System.out.println("--- Lista de Alunos ---");
        System.out.println("----------------");
        if (alunos.isEmpty()) {
            System.out.println("(vazio)");
            return;
        }
        for (Aluno a : alunos) {
            a.exibeAluno();
            System.out.println("----------------");
        }
    }

    private static void listarEnderecos() {
        System.out.println("--- Lista de Endereços ---");
        System.out.println("----------------");
        if (enderecos.isEmpty()) {
            System.out.println("(vazio)");
            return;
        }
        for (Endereco e : enderecos) {
            e.exibeEndereco();
            System.out.println("----------------");
        }
    }
}

▶️ Como testar

  1. Salve os arquivos Endereco.java, Aluno.java e App.java na mesma pasta. Se tudo estiver ok pelo VS Code (sem marcações de erro), executar o programa para testar.
  2. Use o menu interativo para:
    • Cadastrar endereços e alunos;
    • Associar um endereço a um aluno;
    • Listar alunos e endereços.

A relação é de associação: Aluno conhece um Endereco, mas ambos podem existir separadamente.

🧾 Exemplo de Execução

Abaixo está um exemplo de saída no terminal após executar o programa principal do Exercício 1:


=== Sistema Alunos & Endereços (ASSOCIAÇÃO) ===
1) Cadastrar Endereço
2) Cadastrar Aluno
3) Associar Endereço a Aluno
4) Listar Alunos
5) Listar Endereços
0) Sair
Escolha uma opção: 1
--- Cadastrar Endereço ---
Rua: Rua das Palmeiras
Cidade: Araraquara
CEP: 14800-000
Endereço cadastrado: Rua das Palmeiras, Araraquara - 14800-000

=== Sistema Alunos & Endereços (ASSOCIAÇÃO) ===
Escolha uma opção: 2
--- Cadastrar Aluno ---
Nome: Maria Silva
Matrícula: 202501
Aluno cadastrado: Aluno{nome='Maria Silva', matricula='202501', endereco=sem endereço}

=== Sistema Alunos & Endereços (ASSOCIAÇÃO) ===
Escolha uma opção: 3
--- Alunos ---
0 -> Aluno{nome='Maria Silva', matricula='202501', endereco=sem endereço}
Escolha o índice do aluno: 0
--- Endereços ---
0 -> Rua das Palmeiras, Araraquara - 14800-000
Escolha o índice do endereço: 0
Associação realizada! Maria Silva agora está associada a: Rua das Palmeiras, Araraquara - 14800-000

=== Sistema Alunos & Endereços (ASSOCIAÇÃO) ===
Escolha uma opção: 4
--- Lista de Alunos ---
Aluno{nome='Maria Silva', matricula='202501', endereco=Rua das Palmeiras, Araraquara - 14800-000}

=== Sistema Alunos & Endereços (ASSOCIAÇÃO) ===
Escolha uma opção: 0
Encerrando...
  

💡 Observação: Note que o aluno e o endereço existem separadamente, mas podem ser associados por meio do menu — caracterizando uma associação entre objetos.