Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida usando GregorianCalendar

Quando uso return new GregorianCalendar().isLeapYear(ano); para ano =100 retorna true, mas a cada cem anos não é bissexto

Mas quando uso

if (ano % 400 == 0) {
        return true;
    } else if (ano % 4 == 0 && ano % 100 != 0) {
        return true;
    } else {
        return false;
    }

retorna false e o teste falha

1 resposta
solução!

Oii, Bruno! Tudo bem?

Peço desculpas pela demora no retorno a sua mensagem.

A classe GregorianCalendar é uma implementação do calendário gregoriano no Java e ao utilizar o método isLeapYear(ano), ele retorna true se o ano for bissexto e false caso contrário. No exemplo mostrado por você, foi utilizado return new GregorianCalendar().isLeapYear(ano) e passando o valor 100 para o parâmetro ano, que retorna true.

Dito isso, sobre a cada cem anos não é bissexto, no calendário gregoriano tem uma regra para determinar se um ano é bissexto ou não e, de acordo com essa regra, um ano é bissexto se for divisível por 4, a menos que seja divisível por 100. Porém, se for divisível por 400, ele é considerado bissexto novamente.

No seu segundo trecho de código, você está fazendo essa verificação manualmente. E, de fato, para o ano 100, ele não é bissexto, tendo como base a regra mencionada anteriormente. Portanto, o retorno false está correto.

Aproveito para informar que essa formação ganhou uma atualização, caso tenha interesse de mergulhar no conteudo, segue o link:

Espero ter ajudado a entender melhor.

Bons estudos e sucesso!