Exercício 1. Um professor deseja um programa que leia a nota de um aluno pelo teclado (usando Scanner) e exiba o conceito correspondente:
| Faixa | Conceito |
|---|---|
| 9,0 – 10,0 | A |
| 7,0 – 8,9 | B |
| 5,0 – 6,9 | C |
| < 5,0 | D |
ConversorDeNotas com um método obterConceito(double nota) que:
IllegalArgumentException caso a nota seja menor que 0 ou maior que 10.String) correspondente à nota.main, use Scanner para ler a nota digitada pelo usuário e chame obterConceito. O código deve conter:
try envolvendo a leitura e a chamada ao método.catch para InputMismatchException (caso o usuário digite algo que não seja número).catch para IllegalArgumentException (caso a nota esteja fora da faixa válida).catch, seguida de uma ação útil (por exemplo, solicitar nova entrada ao usuário em vez de apenas imprimir o erro).Exercício 2. Um arquivo chamado alunos.csv contém dados de alunos no seguinte formato (um aluno por linha):
nome;nota1;nota2;nota3
Ana;8.5;7.0;9.0
Bruno;5.0;4.5;6.0
Carla;10.0;9.5;8.0
gerarRelatorio(String caminhoEntrada, String caminhoSaida) que:
relatorio.txt) o nome do aluno e sua média, no formato: Ana - Média: 8.17.finally: abra FileReader/BufferedReader e FileWriter/BufferedWriter antes do try, e feche-os explicitamente no bloco finally.try-with-resources: declare os recursos dentro do try(...), eliminando a necessidade do finally.FileNotFoundException (arquivo de entrada inexistente) e IOException (erro durante leitura/escrita) com mensagens descritivas.main, chame ambas as versões e observe o comportamento quando o arquivo de entrada não existe.Exercício 3. Considere um sistema simplificado de agendamento de serviços em uma oficina mecânica. A oficina possui horários disponíveis (por exemplo, "08:00", "10:00", "14:00", "16:00") e cada horário só pode ser ocupado por um cliente.
Crie duas exceções personalizadas (checked):
HorarioIndisponivelException — lançada quando o cliente tenta agendar um horário que já está ocupado. Deve armazenar o horário solicitado.AgendamentoInvalidoException — lançada quando o horário informado não existe na lista de horários da oficina. Deve armazenar o horário inválido.Ambas devem estender Exception e possuir construtores que recebam uma mensagem descritiva e o horário.
Crie uma classe Agenda com:
Map<String, String> que associa horários a nomes de clientes (valor null significa horário livre).agendar(String horario, String cliente) throws HorarioIndisponivelException, AgendamentoInvalidoException que:
AgendamentoInvalidoException se o horário não estiver na lista.HorarioIndisponivelException se o horário já estiver ocupado, informando qual cliente já ocupa aquele horário.listarAgendamentos() que exiba todos os horários e seus respectivos clientes.No main, simule as seguintes situações, tratando cada exceção com try/catch:
"12:00").Crie também um método agendarOuSugerir(String horario, String cliente) que não trate as exceções internamente, mas as declare com throws, delegando o tratamento ao código chamador.
Exercício 4. Considere um sistema simples de processamento de pagamentos que suporta dois meios: saldo em conta e cartão de crédito.
Crie a seguinte hierarquia de exceções (todas checked):
PagamentoException (extends Exception)
├── SaldoInsuficienteException
└── CartaoExpiradoException
PagamentoException: exceção base, com construtores que aceitem mensagem e causa (Throwable).SaldoInsuficienteException: deve armazenar o saldo disponível e o valor solicitado.CartaoExpiradoException: deve armazenar a data de validade do cartão.