Cómo mostrar el calendario en java

Actualmente estoy haciendo un conjunto de problemas donde tengo que crear un calendario que muestra todos los meses de un año, incluyendo los días del mes dentro de ella. Sin embargo estoy teniendo problemas con el espaciado de la primera línea de cada mes. En clase hemos aprendido las sentencias switch, if, else, while, do-while, for bucles

Aquí es lo que se muestra actualmente para uno de mis meses:

La imagen de salida
En la imagen no se muestre a mis entradas, pero lo que escribí fue de 2016 para el año y 5 para el día de la semana que el año empieza en.

Imagen de la salida de lo que lo que se desea
De nuevo, una imagen de lo que se desea. Creo que mi problema es, posiblemente, la ecuación que se utiliza que es: int firstDayEachMonth = (daysMonth + firstDayYear)%7; a pesar de que el maestro le dio a esta ecuación de nosotros, pero parece que no funciona.

Como se puede ver los espacios en la primera línea es todo el camino a la izquierda, debe estar alineado con las fechas designadas, en este caso para el mes de enero, 1 de enero debe alinear en viernes y Jan 2nd debe alinear con el sábado, pero actualmente es el domingo y el lunes.

    import java.util.Scanner;

    public class DisplayCalendar
       {
        public static void main(String[] args)
        {
        //Create a new scanner 
        Scanner input = new Scanner(System.in);

        //Prompt user to enter year 
        System.out.print("Enter a year: ");
        int year = input.nextInt();

        //Prompt user to enter first day of the year
        System.out.print("Enter the weekday that the year starts: ");
        int firstDayYear = input.nextInt();

        //A for loop that prints out each month
        for(int month = 1; month <= 12; month++)
        {
            //Set the value of the amount of days in a month
            int daysMonth = 0;

            //Set value of the month 
            String monthDisplay = "";   

            //Find name of each month and number of days
            switch(month)
            {
                case 1: monthDisplay = "January"; 
                    daysMonth = 31;
                    break;

                case 2: 
                    monthDisplay = "February";
                    int leapYear = 0;
                    while (leapYear > -1)
                    {   
                        //Count all years that are divisible by 4 to be a leap year.
                        leapYear += 4;

                        //If the year inputted is a leap year, the days of the month will be 29.
                        if (year == leapYear)
                        {
                            daysMonth = 29;
                            break;
                        }

                        else 
                        {
                            daysMonth = 28;
                        }
                    }
                    break;

                case 3: monthDisplay = "March";
                    daysMonth = 31;
                    break;

                case 4: monthDisplay = "April";
                    daysMonth = 30;
                    break; 

                case 5: monthDisplay = "May";
                    daysMonth = 31;
                    break;

                case 6: monthDisplay = "June";
                    daysMonth = 30;
                    break; 

                case 7: monthDisplay = "July";
                    daysMonth = 31;
                    break;

                case 8: monthDisplay = "August";
                    daysMonth = 31;
                    break;

                case 9: monthDisplay = "September";
                    daysMonth = 30;
                    break;

                case 10: monthDisplay = "October";
                    daysMonth = 31;
                    break;

                case 11: monthDisplay = "November";
                    daysMonth = 30;
                    break;

                case 12: monthDisplay = "December";
                    daysMonth = 31;
                    break; 

                //If the month is not recognized, dialog box will be displayed, and then exits program. 
                default : System.out.print("Invalid: Your month is not recognized. ");
                    System.exit(0); 

            }
            //Display the month and year
            System.out.println("                      "+ monthDisplay + " " + year);

            //Display the lines
            System.out.println("_____________________________________");

            //Display the days of the week
            System.out.println("Sun     Mon     Tue     Wed     Thu     Fri     Sat");

            //Print spaces depending on the day the month starts.
            int firstDayEachMonth = (daysMonth + firstDayYear)%7;
            for (int space = 1; space <= firstDayEachMonth; space++)
                System.out.print("   ");

            //Print the days 
            for (int daysDisplay = 1; daysDisplay <= daysMonth; daysDisplay++)
            {
                if (firstDayYear%7 == 0)
                    System.out.println();

                System.out.printf("%3d      ", daysDisplay);
                firstDayYear += 1;
            }
            System.out.println();
        }

    }
}   
  • Suponiendo que esta es la tarea, se le permite mirar estándar de bibliotecas de Java y APIs? Si, java.util.Calendario y java.lang.De la cadena.el formato puede ser de su interés. En particular, el Calendario.rollo de ayudar con un montón de trabajo…
  • Hey, no podemos usar las diferentes bibliotecas, sólo mantener con escáner.
InformationsquelleAutor Flinze | 2016-02-28

3 Kommentare

  1. 1

    Puede probar este ejemplo?
    Puedo ver la siguiente salida:

     febrero 2016 
    el Sol Lunes Tue Wed Jueves Viernes Sat 
    1 2 3 4 5 6 
    7 8 9 10 11 12 13 
    14 15 16 17 18 19 20 
    21 22 23 24 25 26 27 
    28 29 

    package general;
    
    import java.util.Scanner;
    

    público clase DisplayCalendar {

    public static void main(String[] args) {
    int Y = 2016; //year
    int startDayOfMonth = 5;
    int spaces = startSayOfMonth;

    //months[i] = name of month i
    String[] months = {
    "", //leave empty so that we start with months[1] = "January"
    "January", "February", "March",
    "April", "May", "June",
    "July", "August", "September",
    "October", "November", "December"
    };

    //days[i] = number of days in month i
    int[] days = {
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    };

    for (int M = 1; M <= 12; M++) {

    //check for leap year
    if ((((Y % 4 == 0) && (Y % 100 != 0)) || (Y % 400 == 0)) && M == 2)
    days
    [M] = 29;

    //print calendar header
    //Display the month and year
    System.out.println(" "+ months[M] + " " + Y);

    //Display the lines
    System.out.println("_____________________________________");
    System.out.println(" Sun Mon Tue Wed Thu Fri Sat");

    //spaces required
    spaces
    = (days[M-1] + spaces)%7;

    //print the calendar
    for (int i = 0; i < spaces; i++)
    System.out.print(" ");
    for (int i = 1; i <= days[M]; i++) {
    System.out.printf(" %3d ", i);
    if (((i + spaces) % 7 == 0) || (i == days[M])) System.out.println();
    }

    System.out.println();
    }
    }
    }

    • Si desea utilizar el escáner, lo utilizan para obtener el Mes y el año. Quisiera saber si esto resuelve el problema.
    • Gracias por la respuesta, no hemos aprendido métodos todavía, así que no creo que nos permite implementar en nuestro código.
    • No resuelve mi problema.
    • Usted puede ayudar a que me explique cómo el espaciado de las obras? Porque tengo que imprimir TODOS los meses del año de enero a diciembre, el año y el día de inicio por el usuario. En su programa, parece que sólo muestra un mes, que es lo que necesito no para ayudar sino los espaciamientos de la primera línea de cada mes. Si miras mi post de nuevo, se puede ver otro link de una imagen de lo que quiero.
    • ¿Has comprobado esto todavía?
  2. 1

    Ya que esta parece ser una tarea, no me molesta para darle el algoritmo correcto. Que acabaría con el propósito de que usted u otras personas con el mismo problema – la práctica de la programación y desarrollo de habilidades analíticas.

    En esta línea for (int space = 1; space <= firstDayEachMonth; space++) puede ignorar totalmente firstDayEachMonth resultado y el uso de su firstDayYear contador. Este contador tiene la partida de semana del año y se incrementa cada día que pasa. También, es necesario definir si la semana empieza en 0 o 1.

    En esta parte, ya están dando un salto de línea para el final de la semana aquí en:

    if (firstDayYear%7 == 0)
       System.out.println();

    Me gustaría restablecer firstDayYear al llegar a esta condición debido a que ya se están utilizando como parámetro para establecer sus espacios, nunca vas a tener este número va mayor que 7. De esta manera cada semana la línea trazada correctamente en el calendario y el único problema sería la presentación en el formato correcto en la pantalla.

    Al imprimir los días de la semana encabezado como este System.out.println("Sun Mon Tue Wed Thu Fri Sat"); cuenta que tienes los nombres con longitud de 3 más de 5 espacios en blanco. Así que esta línea de System.out.printf("%3d ", daysDisplay); debe tener un dígito con un ancho de 3 espacios, lo que explica el uso de %3d, además de 5 espacios en blanco. En este caso tiene 6 espacios en blanco que siempre te dan el mal de desplazamiento y hará que algunas infierno en algunas líneas.

    Estas son las cosas que he notado y espero te sirva de ayuda. Paz!

  3. 0
    public class Exercice5_29DisplayCalenderDay {
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
          //Create a new scanner 
        Scanner input = new Scanner(System.in);
    
        //Prompt user to enter year 
        System.out.print("Enter a year: ");
        int year = input.nextInt();
    
        //Prompt user to enter first day of the year
        System.out.println("Enter the weekday that the year starts: ");
        int day = input.nextInt();
        int dayCounter = day;
         int nbrOfDays = 0;
         String  monthx = ""; 
        for (int month= 1; month <=12; month++)
        {
    
                            //Switch to chose the month 
                  switch (month)
                 {
                      case 1: monthx = "January";
                                 nbrOfDays = 31;
                                 break;
                      case 2: monthx = "February";
                                         if ( year % 4 == 0 && year % 100 !=0 || year % 400 == 0)
                          {
                                 nbrOfDays = 29;
                                 break;
                          }
                                         else
                             {  nbrOfDays = 28;
                                 break;
                             }
                     case 3: monthx = "March";
                                 nbrOfDays = 31;
                                 break; 
                      case 4: monthx = "April";
                                 nbrOfDays = 30;
                                 break; 
                             case 5: monthx = "May";
                                 nbrOfDays = 31;
                                 break;
    
                             case 6: monthx = "June";
                                 nbrOfDays = 30;
                                 break;
                              case 7: monthx = "July";
                                 nbrOfDays = 31;
                                 break;
                              case 8: monthx = "August";
                                 nbrOfDays = 31;
                                 break;
                        case 9: monthx = "September";
                                 nbrOfDays = 30;
                                 break; 
                        case 10: monthx = "October";
                                 nbrOfDays = 31;
                                 break; 
                        case 11: monthx = "November";
                                 nbrOfDays = 30;
                                 break; 
                             case 12: monthx = "December";
                                 nbrOfDays = 31;
                                 break;                  
                 }
    
                     System.out.printf("%15s %d  \n", monthx , year);
                     System.out.println("----------------------------");
                     System.out.printf("%s %s %s %s %s %s %s\n ", "Sun","Mon","Tue", "Wed", "Thu","Fri","Sat");
    
                     for (int space =1; space<=day; space++) 
                     {
                         System.out.printf("%4s", "    ");
                     }
                     for (int i = 1; i <=nbrOfDays; i++)
                     {
                        dayCounter++;
                        if ( dayCounter% 7==0)
                         System.out.printf("%- 4d\n", i);
                        else
                        System.out.printf("%-4d", i);
    
                     }
                     day = (day + nbrOfDays)%7;
    
                             System.out.println();
    
        }    
    
    }
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea