как объяснить этот код Java о календаре - PullRequest
0 голосов
/ 08 января 2011

Я хочу понять этот код. Я знаю, что этот код дает мне календарь, когда я ввожу год, месяц и день. Затем программа показывает календарь этого месяца, кроме того, код показывает мне время и дату сейчас. Но я хочу понять, как это работает?

import          java.util.*;
import          java.text.SimpleDateFormat;
public class    Calendar3
{
  private static void doSimpleDateFormat() {
    Calendar        now = Calendar.getInstance();
    SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
                    System.out.print(" \n It is now : " + formatter.format(now.getTime()));
                    System.out.println();
  }
  public static void CalendarDemo(int Year, int Month, int Date) {
    GregorianCalendar a = new GregorianCalendar();
                    a.set(Calendar.YEAR, Year);
                    a.set(Calendar.MONTH, (Month - 1));
                    a.set(Calendar.DAY_OF_MONTH, 1);
    int             weekday = a.get(Calendar.DAY_OF_WEEK);
    int             month = a.get(Calendar.MONTH);
                    System.out.println("'\n'      YEAR : " + Year);
    switch          (month) {
    case 0:
      System.out.println();
      System.out.println("        JANUARY         ");
      System.out.println();
      break;
    case 1:
      System.out.println();
      System.out.println("        FEBRUARY           ");
      System.out.println();
      break;
    case 2:
      System.out.println();
      System.out.println("         MARCH          ");
      System.out.println();
      break;
    case 3:
      System.out.println();
      System.out.println("         APRIL         ");
      System.out.println();
      break;
    case 4:
      System.out.println();
      System.out.println("          MAY           ");
      System.out.println();
      break;
    case 5:
      System.out.println();
      System.out.println("          JUNE        ");
      System.out.println();
      break;
    case 6:
      System.out.println();
      System.out.println("          JULY          ");
      System.out.println();
      break;
    case 7:
      System.out.println();
      System.out.println("         AUGUST        ");
      System.out.println();
      break;
    case 8:
      System.out.println();
      System.out.println("       SEPTEMBER            ");
      System.out.println();
      break;
    case 9:
      System.out.println();
      System.out.println("        OCTOBER        ");
      System.out.println();
      break;
    case 10:
      System.out.println();
      System.out.println("        NOVEMBER            ");
      System.out.println();
      break;
    case 11:
      System.out.println();
      System.out.println("        DECEMBER           ");
      System.out.println();
      break;
    }
                    System.out.println("Sun Mon Tue Wed Thu Fri Sat");
    for             (int i = Calendar.SUNDAY; i < weekday; i++) {
      System.out.print("  ");
    }
    do {
      int             day = a.get(Calendar.DAY_OF_MONTH);
      if (day < 10) {
        System.out.print(" " + day);
      } else if (day >= 10) {
        System.out.print(day);
      }
      if (day == Date) {
        System.out.print("* ");
      } else {
        System.out.print("  ");
      }
      if (weekday == Calendar.SATURDAY) {
        System.out.println();
      }
      a.add(Calendar.DAY_OF_MONTH, 1);
      weekday = a.get(Calendar.DAY_OF_WEEK);
    }
    while (a.get(Calendar.MONTH) == month);
    if (weekday != Calendar.SUNDAY) {
      System.out.println();
    }
    System.out.println();
    System.out.println("Note: '*' over any number is your desired number");
    System.out.println();
    doSimpleDateFormat();
  }
}

Ответы [ 2 ]

3 голосов
/ 08 января 2011

Это очень долго и не особенно хорошо написано.(Например, весь блок переключателя можно заменить одной строкой кода)

Если вы хотите понять, что он делает и как он это делает, я предлагаю вам пройтись по программе в отладчике в вашей IDE.Это покажет вам построчно, какие все переменные установлены.

РЕДАКТИРОВАТЬ: короче не всегда лучше, но так как вам было интересно, как коротко вы можете сделать это.

        YEAR:  2011

        JANUARY

Sun Mon Tue Wed Thu Fri 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 
30  31  
0 голосов
/ 08 января 2011
  • Перейдите на сайт www.jetbrains.org, загрузите выпуск для сообщества intellij

    • Установите его.
    • Создайте проект и вставьте свой код вЭто.

    • Добавить метод main

    public static void main (String [] args) {Calendar3.CalendarDemo (2011, 1, 8);}

    • Поместите точку останова на строку: GregorianCalendar a = new GregorianCalendar ();нажав на левое поле.

    • Отладка.

Кстати: существует проблема форматирования, этоизменение поможет:

for (int i = Calendar.SUNDAY; i < weekday; i++) {
        System.out.print("    ");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...