Hace ya un rato, alguien me pidio ayuda con la logica de un programa para calcular si el entero pasado como parametro en un metodo es un año bisiesto. Si por allí alguien tiene la misma duda chequen el siguiente ejemplo realizado con el lenguaje JAVA, el cual puede ser ampliamente adaptado a cualquier otro lenguaje; para fines meramente didacticos:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Haz un programa que pida un año por pantalla y diga si es bisiesto.
* Un año es bisiesto bajo las Siguientes condiciones:
* - Un año divisible por 4 es bisiesto.
* - Un año divisible por 100 no es bisiesto.
* - Un año divisible por 400 es bisiesto
*
*/
public class Bisiesto {
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader buffer = new BufferedReader(input);
int tmp=0;
int num[] = new int[4];
public static void main(String args[]){
Bisiesto ej = new Bisiesto();
ej.ingreso();
}
private void ingreso() {
System.out.print("Ingrese un año: ");
tmp = leerEntero();
if( (tmp%400==0) && !(tmp%100==0) || (tmp%4==0 ) )
System.out.print("El año es bisiesto");
else
System.out.print("El año no es bisiesto.");
}
private int leerEntero() {
try {
tmp = Integer.parseInt( buffer.readLine() );
} catch (NumberFormatException e) {
System.out.print("Solo números, vuelva a ingresar el valor:");
leerEntero();
} catch (IOException e) {
System.out.println("Se ha producido un error");
return 0;
}
return tmp;
}
}
Ahora bien, con fines productivos se puede usar la subclase de java.util.Calendar llamada java.util.GregorianCalendar el cual posee un metodo llamado isLeapYear el cual retorna un booleano indicando si el entero pasado como parametro es bisiesto o no.
public boolean isLeapYear(int year)
La ventaja de usar la API java.util.GregorianCalendar es que podemos revisar un año antes de cristo (En ingles B.C.)