// Lab04.java (C) 2007 adolfo@di-mare.com
/**
@(#)Lab04.java 2007
Ejemplo de una clase para años bisiestos.
Este programa interactivo recibe un año {@code A} y responde si el año
es o no bisiesto. Escoja el año {@code A==0} para detener el programa.
Cálculo del año bisiesto:
Dado un año {@code "A"}, el año {@code "A"} es bisiesto si es múltiplo de 4,
exceptuando los múltiplos de {@code 100}, que no son bisiestos, a menos que
sean múltiplos de {@code 400}.
Ejemplos
{@code 1998} no es múltiplo de {@code 4}, por lo tanto, no es bisiesto.
{@code 1900} es múltiplo de {@code 4} y de {@code 100}, pero no es múltiplo
de {@code 400}, entonces no es bisiesto.
{@code 2000} sí es bisiesto.
{@code 1988} sí es bisiesto.
@author Adolfo Di Mare
*/
import java.io.*; // Clases para leer desde el teclado
import java.lang.System; // Esta siempre la importa Java
/** Almacena el año. */
class bisiesto {
/** Año almacenado */
private int m_ano;
/** Calcula de antemano la cantidad de días del año almacenado. */
private int m_dias;
/** Constructor por defecto. */
public bisiesto() { m_ano = 0; m_dias = 366; }
/** Constructor para un año específico. */
public bisiesto(int a) { set(a); }
/** Retorna la cantidad de días del año. */
public int dias() { return m_dias; }
/** Retorna el año. */
public int get() { return m_ano; }
/** Cambia el año almacenado en la instancia. */
public void set( int a ) { m_ano = a; m_dias = (es_bisiesto() ? 366 : 365); }
/** Retorna "true" cuando el año sí es bisiesto. */
public boolean es_bisiesto() {
boolean es;
if (m_ano % 100 == 0) {
if (m_ano % 400 == 0) { // es = (m_ano % 400 == 0);
es = true;
}
else {
es = false;
}
}
else {
es = ((m_ano % 4) == 0);
}
return es;
} // bisiesto::es_bisiesto()
/** Retorna la cantidad de días que tiene el i-ésimo mes del año.
Los meses se numeran desde {@code 1} hasta {@code 12}.
Enero es {@code 1} ... Diciembre es {@code 12}.
*/
public int dias_del_mes(int mes) {
int n;
switch (mes) {
case 4: case 6:
case 9: case 11: n = 30;
break;
case 1: case 3:
case 5: case 7:
case 8:
case 10: case 12: n = 31;
break;
case 2: n = (es_bisiesto() ? 29 : 28);
break;
default: n = 0;
break;
}
return n;
} // dias_del_mes()
/** Programa principal. */
public static void main( String args[] ) throws IOException {
BufferedReader CIN = new BufferedReader( new InputStreamReader(System.in) );
System.out.println( "Escriba un año (0 para terminar): " );
bisiesto A; A = new bisiesto( 1492 );
while (A.get() != 0) {
A.set( Integer.parseInt( CIN.readLine() ) );
System.out.print( "\nEl año " + (A.get()) );
if (!A.es_bisiesto()) {
System.out.print( " NO" );
}
else {
}
System.out.println( " es bisiesto" );
}
return;
} // main()
} // bisiesto
// EOF: Lab04.java