switch son saber programa para meses los fecha desde cuales con como calcular bisiestos bisiesto años año algoritmo java calendar

son - Calcular el año bisiesto en Java



meses del año en java (3)

Posible duplicado:
Código Java para calcular el año bisiesto, ¿es correcto este código?

Esto era tarea, y ya he recibido mi calificación, pero no implementé años bisiestos en mi código. Este es un programa simple que muestra los números en un mes basado en la entrada del usuario. Lo único que no puedo entender es una forma de implementar un año bisiesto que tendría 29 días para febrero en lugar de 28, sin escribir múltiples declaraciones if . Seguramente hay una manera más fácil? Aquí está el código:

//Displays number of days in a month package chapter_3; import java.util.Scanner; public class Chapter_3 { public static void main(String[] args) { System.out.println("This program will calculate /n" + "the number of days in a month based upon /n" + "your input, when prompted please enter /n" + "the numerical value of the month you would like/n" + "to view including the year. Example: if you would like/n" + "to view March enter 3 2011 and so on."); Scanner input = new Scanner(System.in); //Prompt user for month and year System.out.print("Please enter the month and year: "); int month = input.nextInt(); int year = input.nextInt(); if (month == 1) { System.out.println("January " + year + " has 31 days"); } else if (month == 2) { System.out.println("February " + year + " has 28 days"); } else if (month == 3) { System.out.println("March " + year + " has 31 days"); } else if (month == 4) { System.out.println("April " + year + " has 30 days"); } else if (month == 5) { System.out.println("May " + year + " has 31 days"); } else if (month == 6) { System.out.println("June " + year + " has 30 days"); } else if (month == 7) { System.out.println("July " + year + " has 31 days"); } else if (month == 8) { System.out.println("August " + year + " has 31 days"); } else if (month == 9) { System.out.println("September " + year + " has 30 days"); } else if (month == 10) { System.out.println("October " + year + " has 30 days"); } else if (month == 11) { System.out.println("November " + year + " has 30 days"); } else if (month == 12) { System.out.println("December " + year + " has 31 days"); } else { System.out.println("Please enter the numerical value " + "of the month you would like to view"); } } }


Si usa el GregorianCalendar , podría hacer lo siguiente:

Determina si el año dado es un año bisiesto. Devuelve verdadero si el año dado es un año bisiesto. Para especificar los números de año BC, debe darse el número de 1 año. Por ejemplo, el año BC 4 se especifica como -3.

GregorianCalendar cal = new GregorianCalendar(); if(cal.isLeapYear(year)) { System.out.print("Given year is leap year."); } else { System.out.print("Given year is not leap year."); }


podría usar una declaración de cambio, con algunas declaraciones if dentro del caso de febrero:

switch(month) { case 1: System.out.println("January " + year + " has 31 days"); break; case 2: int n=28; if(year%4==0 && (year%100!=0 || year%400==0) n++; System.out.println("February " + year + " has "+n+" days"); break; case 3: System.out.println("March " + year + " has 31 days"); break; case 4: System.out.println("April " + year + " has 30 days"); break; case 5: System.out.println("May " + year + " has 31 days"); break; case 6: System.out.println("June " + year + " has 30 days"); break; case 7: System.out.println("July " + year + " has 31 days"); break; case 8: System.out.println("August " + year + " has 31 days"); break; case 9: System.out.println("September " + year + " has 30 days"); break; case 10: System.out.println("October " + year + " has 30 days"); break; case 11: System.out.println("November " + year + " has 30 days"); break; case 12: System.out.println("December " + year + " has 31 days"); break; default case: System.out.println("Please enter the numerical value of the month you would like to view"); }

ver http://download.oracle.com/javase/tutorial/java/nutsandbolts/switch.html para más información


Citando http://en.wikipedia.org/wiki/Leap_year

Los años que son uniformemente divisibles entre 100 no son años bisiestos, a menos que también sean divisibles por 400, en cuyo caso son años bisiestos.

Entonces, si quieres reinventar la rueda:

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

Pero la solución más elegante (tomada de aquí ) es probablemente

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