Olá, Bernardo. Como vai?
Parabéns por seguir firme nos exercícios e praticar a manipulação de datas no Java! A estrutura geral do seu programa está muito bem organizada.
No entanto, neste exercício, você se deparou com um detalhe lógico clássico que confunde muita gente na hora de trabalhar com comparações de tempo. Se você rodar o seu código exatamente como ele está, a lógica dos blocos if/else vai entregar os resultados invertidos para o usuário.
Vamos analisar juntos o que aconteceu para que você possa corrigir?
Entendendo os Métodos de Comparação
O método .isBefore() pode ser traduzido literalmente como "é antes de?".
Na sua primeira linha de validação, você escreveu:
if (evento01.isBefore(LocalDate.now()))
Aqui, você está perguntando ao Java: "A data do evento01 (29/05/2026) vem antes da data de hoje?".
Como o evento está marcado para o dia 29 e hoje ainda é um dia anterior a esse, a resposta para essa pergunta é Falso. Portanto, o Java pula esse bloco.
O problema é que, caso essa condição fosse verdadeira (se o evento estivesse marcado para o ano passado, por exemplo), o seu código imprimiria na tela: "O evento ainda não ocorreu.". Repare que a mensagem diz o oposto do que o método testou! Se a data do evento vem antes de hoje, significa que ele já ocorreu.
O mesmo acontece no seu bloco else. Ele só será executado se o evento não for antes e nem hoje — ou seja, se o evento for depois de hoje (no futuro). Mas a mensagem configurada nele diz: "O evento já ocorreu".
Como corrigir a lógica das mensagens?
Para que o seu programa funcione perfeitamente e exiba os alertas corretos na tela, basta ajustar o texto dos comandos System.out.println para que eles correspondam exatamente ao teste de cada condição, ou inverter os métodos.
O ecossistema de comparação do LocalDate segue esta linha do tempo lógica:
Veja a forma corrigida e ideal de estruturar os seus blocos condicionais:
// Se a data do evento é ANTES de hoje, ele JÁ aconteceu
if (evento01.isBefore(LocalDate.now())) {
System.out.println("O evento já ocorreu.");
}
// Se a data é IGUAL a hoje
else if (evento01.isEqual(LocalDate.now())) {
System.out.println("O evento é hoje!");
}
// Se não é antes e nem igual, ele só pode ser DEPOIS (no futuro)
else {
System.out.println("O evento ainda não ocorreu (será no futuro).");
}
Uma dica extra de formatação
Notei que na linha onde você exibe a data atual, você utilizou o comando direto:
System.out.println("Data atual: " + LocalDate.now());
O método LocalDate.now() por padrão imprime a data no formato internacional ISO-8601 (aaaa-mm-dd). Como você criou um excelente objeto formato logo acima, uma boa prática para manter o layout do seu sistema padronizado é aplicar a formatação também na exibição da data atual:
System.out.println("Data atual: " + LocalDate.now().format(formato));
Ajustando esses ponteiros lógicos, o seu código fica blindado e pronto para rodar em qualquer sistema de agendamento. Excelente persistência nos estudos de java.time!
Espero que possa ter lhe ajudado!