Código Java para calcular el año bisiesto

Resuelto Ibn Saeed asked hace 15 años • 23 respuestas

Estoy siguiendo el libro "El arte y la ciencia de Java" y muestra cómo calcular un año bisiesto. El libro utiliza la biblioteca de ACM Java Task Force.

Aquí está el código que utilizan los libros:

import acm.program.*;

public class LeapYear extends ConsoleProgram {
    public void run()
    {

        println("This program calculates leap year.");
        int year = readInt("Enter the year: ");     

        boolean isLeapYear = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));

        if (isLeapYear)
        {
            println(year + " is a leap year.");
        } else
            println(year + " is not a leap year.");
    }

}

Así es como calculé el año bisiesto.

import acm.program.*;

public class LeapYear extends ConsoleProgram {
    public void run()
    {

        println("This program calculates leap year.");
        int year = readInt("Enter the year: ");

        if ((year % 4 == 0) && year % 100 != 0)
        {
            println(year + " is a leap year.");
        }
        else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
        {
            println(year + " is a leap year.");
        }
        else
        {
            println(year + " is not a leap year.");
        }
    }
}

¿Hay algún problema con mi código o debo usar el que proporciona el libro?

EDITAR: Ambos códigos anteriores funcionan bien. Lo que quiero preguntar es qué código es la mejor manera de calcular el año bisiesto.

Ibn Saeed avatar Jun 20 '09 16:06 Ibn Saeed
Aceptado

La implementación correcta es:

public static boolean isLeapYear(int year) {
  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.YEAR, year);
  return cal.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}

Pero si vas a reinventar esta rueda entonces:

public static boolean isLeapYear(int year) {
  if (year % 4 != 0) {
    return false;
  } else if (year % 400 == 0) {
    return true;
  } else if (year % 100 == 0) {
    return false;
  } else {
    return true;
  }
}
cletus avatar Jun 20 '2009 10:06 cletus

java.time.Year::isLeap

Me gustaría agregar la nueva java.timeforma de hacer esto con la Yearclase y isLeapel método:

java.time.Year.of(year).isLeap();
bowmore avatar May 22 '2016 22:05 bowmore