Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/10/2013, 05:28
BlancoLanda
 
Fecha de Ingreso: mayo-2009
Mensajes: 22
Antigüedad: 15 años, 9 meses
Puntos: 1
Problema con getMaximum (GregorianCalendar)

¡Buenas! Estoy haciendo un ejercicio de JAVA que consiste en determinar los días de la semana en los que cayó una fecha en los últimos 10 años, introduciendo un día y un mes como parámetros.

Este es el código que llevo hecho hasta ahora:

Código Java:
Ver original
  1. import java.util.GregorianCalendar;
  2.  
  3. public class Calendario {
  4.  
  5.     public static void main(String[] args) {
  6.  
  7.         GregorianCalendar calendario = new GregorianCalendar();
  8.  
  9.         int día = Integer.parseInt(args[0]);
  10.         int mes = Integer.parseInt(args[1]);
  11.         int añoactual = GregorianCalendar.getInstance().get(GregorianCalendar.YEAR);
  12.  
  13.         calendario.set(GregorianCalendar.YEAR, añoactual);
  14.         calendario.set(GregorianCalendar.MONTH, mes - 1);
  15.  
  16.         if (día > calendario.getMaximum(GregorianCalendar.DAY_OF_MONTH)
  17.                 || día < 1 && mes < 1 || mes > 12) {
  18.             System.out.println("Esta fecha no es válida, introduzca otros valores.");
  19.             System.exit(1);
  20.         }
  21.  
  22.         calendario.set(GregorianCalendar.DAY_OF_MONTH, día - 1);
  23.         if(mes==2 && día==29 && !calendario.isLeapYear(calendario.get(GregorianCalendar.YEAR))){
  24.         System.out.println("Este año no es bisiesto, por lo tanto no hay 29 de Febrero \n");
  25.         }else{
  26.         System.out.println("El "+día+ " de " + MesconLetras(mes-1) + " de " + añoactual + " es " + DíaconLetras(calendario.get(GregorianCalendar.DAY_OF_WEEK)) + "\n");
  27.         }
  28.        
  29.        
  30.         for (int i = 0; i < 11; i++) {
  31.            
  32.             calendario.add(GregorianCalendar.YEAR, -1);
  33.            
  34.             boolean bisiesto = calendario.isLeapYear(calendario
  35.                     .get(GregorianCalendar.YEAR));
  36.            
  37.             if (mes == 2 && día == 29 && bisiesto == false) {
  38.                 System.out.println("En el año "
  39.                         + calendario.get(GregorianCalendar.YEAR)
  40.                         + " esta fecha no existió (Año no bisiesto) \n");
  41.             } else {
  42.                 System.out.println("En el año "
  43.                         + calendario.get(GregorianCalendar.YEAR)
  44.                         + ", el día "
  45.                         + día
  46.                         + " de "
  47.                         + MesconLetras(mes - 1)
  48.                         + " fue "
  49.                         + DíaconLetras(calendario
  50.                                 .get(GregorianCalendar.DAY_OF_WEEK)) + "\n");
  51.             }
  52.  
  53.         }
  54.     }
  55.  
  56.     public static String MesconLetras(int numero) {
  57.         switch (numero) {
  58.         case 0:
  59.             return "Enero";
  60.         case 1:
  61.             return "Febrero";
  62.         case 2:
  63.             return "Marzo";
  64.         case 3:
  65.             return "Abril";
  66.         case 4:
  67.             return "Mayo";
  68.         case 5:
  69.             return "Junio";
  70.         case 6:
  71.             return "Julio";
  72.         case 7:
  73.             return "Agosto";
  74.         case 8:
  75.             return "Septiempre";
  76.         case 9:
  77.             return "Octubre";
  78.         case 10:
  79.             return "Noviembre";
  80.         case 11:
  81.             return "Diciembre";
  82.         default:
  83.             return null;
  84.         }
  85.     }
  86.  
  87.     public static String DíaconLetras(int numero) {
  88.         switch (numero) {
  89.         case 1:
  90.             return "Lunes";
  91.         case 2:
  92.             return "Martes";
  93.         case 3:
  94.             return "Miércoles";
  95.         case 4:
  96.             return "Jueves";
  97.         case 5:
  98.             return "Viernes";
  99.         case 6:
  100.             return "Sábado";
  101.         case 7:
  102.             return "Domingo";
  103.         default:
  104.             return null;
  105.         }
  106.     }
  107. }

Creo que no voy mal encaminado, sin embargo, tal como está el código, si introduzco como parámetros el 31 del mes 11 (Noviembre), fecha que no existe (pues Noviembre tiene 30 días), el programa me devuelve esto:

Cita:
El 31 de Noviembre de 2013 es Domingo

En el año 2012, el día 31 de Noviembre fue Sábado

En el año 2011, el día 31 de Noviembre fue Jueves

En el año 2010, el día 31 de Noviembre fue Miércoles

En el año 2009, el día 31 de Noviembre fue Martes

En el año 2008, el día 31 de Noviembre fue Lunes

En el año 2007, el día 31 de Noviembre fue Sábado

En el año 2006, el día 31 de Noviembre fue Viernes

En el año 2005, el día 31 de Noviembre fue Jueves

En el año 2004, el día 31 de Noviembre fue Miércoles

En el año 2003, el día 31 de Noviembre fue Lunes

En el año 2002, el día 31 de Noviembre fue Domingo
En todos los demás aspectos el programa funciona perfectamente, incluso funciona bien con los bisiestos y el 29 de Febrero. Pero eso falla, sin duda no estoy usando bien el getMaximum...

¿Alguien sabe cuál es mi problema?

Muchas gracias.