Oi Renato, o desafio é um desafio e dos bons, você tem que garantir que não sejam inseridas pelo usuário datas inconsistentes ex.:(00/02/2014; 30/02/2017; 32/12/2017) portanto deverá adicionar um tratamento na inserção dessas datas, pra que a data do dia por exemplo deve ser > 0 e dependendo do mês pode ser até 28, 30 ou 31. Isso pode ser feito de n maneiras se o algoritmo atende ao requisito pedido de tratar a data, perfeito!. A solução do instrutor é bem sucinta mas se a sua incluir muito mais código e tiver completamente diferente não está errada, é normal em um primeiro momento ter um código que funciona perfeitamente o qual você pode ir refinando ainda mais ao passo que entende melhor a lógica por trás das linhas.
Acompanhemos a solução :
public class Data {
public Data(int dia, int mes, int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano;
if (! isDataViavel(dia, mes, ano)) {
System.out.println("A data " + formata() + " não existe!");
}
}
private boolean isDataViavel(int dia, int mes, int ano) {
if (dia <= 0 || mes <= 0) {
return false;
}
int ultimoDiaDoMes = 31; // por padrao são 31 dias
if (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) {
ultimoDiaDoMes = 30;
} else if (mes == 2) {
ultimoDiaDoMes = 28;
if((ano % 400 == 0) || ((ano % 4 == 0) && (ano % 100 != 0))){
ultimoDiaDoMes = 29;
}
}
if (dia > ultimoDiaDoMes) {
return false;
}
return true;
}
}
Nessa solução ele refinou o código passando a data para ser tratada já no construtor que já verifica se a data não é viável caso ela realmente não seja já exibe a mensagem e pede uma nova inserção por exemplo. Esse formata() é apenas aquele método que arruma a data para ela aparecer certinha (xx/xx/xxxx).No método booleano
boolean isDataViavel
ele faz aqueles tratamentos sobre o dia como evitando que ele não seja nulo ou negativo por exemplo além de identificar pelo mês qual é a data limite daquele mês no mês de junho por exemplo temos apenas 30 dias o que faz com que a data 31/06 seja considerada inconsistente, certo!
Caso a data fornecida não seja invalida ela vai retornar true.
Detalhe aí fizemos todo esse código para tratar o dia, no entanto você poderia inserir mais lógica para não permitir que o mês seja inválido(<0 e >12).
Esse é o tipíco algoritmo que não temos a solução pronta, vamos codificando e testando, fazendo validações pra verificar se apenas as datas corretas estão passando. Ao fim temos o código completo.
Caso persista alguma dúvida a respeito desse desafio ou curso pode perguntar aqui mesmo ou se você não tiver mais nenhuma dúvida a respeito você pode marcar uma resposta como solução, finalizando assim esse tópico.Espero ter ajudado. Bons estudos.