🧩 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
- Salve os arquivos
Endereco.java,Aluno.javaeApp.javana mesma pasta. Se tudo estiver ok pelo VS Code (sem marcações de erro), executar o programa para testar. - 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.