Verificar se ano é bissexto

Boa noite, estou realizando um exercício para verificar se um ano informado é bissexto. As regras para verificar se o ano é bissexto são essas:

Para ser bissexto, o ano deve ser:

"Divisível por 4. Sendo assim, a divisão é exata com o resto igual a zero;"

"Não pode ser divisível por 100. Com isso, a divisão não é exata, ou seja, deixa resto diferente de zero;"

"Pode ser que seja divisível por 400. Caso seja divisível por 400, a divisão deve ser exata, deixando o resto igual a zero."

Sendo assim eu pensei em algo do tipo:

import java.util.Scanner;

public class VerificaAnoBissexto {

public static void main(String[] args) {

	int ano = 0;

	Scanner inputScan = new Scanner(System.in);
	System.out.println("Digite o ano a ser verificado: ");
	ano = inputScan.nextInt();

	if (ano % 4 != 0 && ano % 400 != 0) {

		System.out.println("Ano não é bissexto");
	} else {
		System.out.println("Ano bissexto");
	}
}

}

A minha dúvida seria, existe outra forma de fazer essa validação?
Esta forma que usei seria a mais indicada?

Estou estudando em casa, iniciando na linguagem e fazendo todo tipo de exercicio que encontro, agradeço aos colegas desde já.

Você está no caminho certo, mas tem alguns melhorias que podem ser feitas nesse código:

  • Cadê o tratamento de anos divisíveis por 100?
  • As regras sao para dizer se um ano é bissexto, mas seu código está escrito para detectar se o ano NAO é bissexto. Isso também funciona, mas geralmente escrever código para o caso negativo da especificaçao deixa mais confuso de entender.
  • Teste diferentes valores que se encaixam em cada regra para ver se ele funciona em todos casos. Já adianto que tá falhando em alguns.

Um comentário sobre as regras é que elas foram escritas de maneira confusa. Ser divísivel por um número matematicamente falando já implica numa divisao com resto zero. E todo número divisível por 400 é divisível por 100, mas do jeito que tá escrito, nao ser divisível por 100 parece sempre indicar que o ano nao é bissexto.

Meu Deus, arruma esse if por favor, usa os parênteses.

Na wikipedia tem até o algoritmo em Java.

Num primeiro momento, achei as regras confusas, mas, aí resolvi validar.
1900 é divisível por 100, mas não por 400 (1900%400 != 0)
2000 é divisível por 100 e 400 (2000%400 = 0).
E, para os casos de números não terminados em 0, basta serem divisíveis por 4, como 1988 (1988%4 = 0)

Entao, eu nao quis dizer que estavam erradas, apenas confusas.

A regra “Nao pode ser divisível por 100” parece ser absoluta, quando na verdade, se também for divísvel por 400 ainda é bissexto.

Certamente foram escritas sem o cuidado necessário para serem mais claras.

1 curtida

Que doravante possamos implementar com plenitude o algoritmo outrora descrito de forma confusa.