2011-01-07 1 views
0

私はこのコードを理解したいと思います。私は年、月、日を入力するときにこのコードが私にカレンダーを与えることを知っています。次に、プログラムはその月のカレンダーを表示します。さらに、コードは私に現在の時刻と日付を表示します。しかし、私はそれがどのように機能するのか理解したいですか?どのようにこのJavaコードをカレンダーについて説明できますか

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

あなたが理解していない、まさにそれがありますか? – Tedil

+0

この部分はカレンダーnow = Calendar.getInstance(); SimpleDateFormat = new SimpleDateFormat( "hh:mm:ss a zzz"でのyyyy.MM.dd); System.out.print( "\ nこれは現在:" + formatter.format(now.getTime() )); } public static void CalendarDemo(int Year、int Month、int Date){GregorianCalendar a =新しい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); – MANAL

答えて

3

非常に長く、特によく書かれていません。 (たとえば、スイッチブロック全体を1行のコードに置き換えることができます)

あなたはその機能とその機能を理解したい場合は、IDEのデバッガでプログラムを実行することをお勧めします。これは、すべての変数が設定されている行を1行ずつ表示します。

編集:短い方が良いとは限りませんが、あなたがどれほど短くすることができるか不思議であったためです。

import static java.util.Calendar.*; 

private static final SimpleDateFormat YEAR_MONTH = new SimpleDateFormat("'\n  YEAR: ' yyyy'\n  'MMMM'\n'"); 
public static void CalendarDemo(int year, int month, int date) { 
    GregorianCalendar a = new GregorianCalendar(year, month-1, 1); 
    System.out.printf("%n%s%nSun Mon Tue Wed Thu Fri Sat%n%"+4*(SUNDAY-a.get(DAY_OF_WEEK))+"s", YEAR_MONTH.format(a.getTime()).toUpperCase() , ""); 
    for(;a.get(MONTH) == month-1;a.add(DAY_OF_MONTH, 1)) { 
     int day = a.get(DAY_OF_MONTH); 
     System.out.printf("%2d%s%s", day, day == date ? "*" : " ", a.get(DAY_OF_WEEK) == SATURDAY ? "\n" : " "); 
    } 
    System.out.println("\n\nNote: '*' over any number is your desired number\n"); 
    doSimpleDateFormat(); 
} 

CalendarDemo(2011,01,07); 

プリント

 
     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

私はそれをもっと短くすることができますか? 私がこれを使っているとき(a.get(Calendar.MONTH)==月); IDEの出力 – MANAL

+0

デバッガになります。どういう意味? – MANAL

+0

IDEで、次の実行ボタンは通常Debugです。コードの先頭にブレークポイントを置き、ステップ実行します。 –

0
  • 進み、それをインストールし

    • コミュニティ版のIntelliJダウンロード、www.jetbrains.orgします。
    • プロジェクトを作成し、コードを入力します。

    • メイン方法

    パブリック静的無効メイン(文字列[] args){ Calendar3.CalendarDemo(2011、1、8)を追加。 }

    • は、ライン上のブレークポイントを置く: てGregorianCalendarのA =新しいてGregorianCalendar()。左側の余白をクリックして をクリックします。

    • デバッグ。

      ところで

:書式設定の問題があり、この変更は役立ちます:

for (int i = Calendar.SUNDAY; i < weekday; i++) { 
     System.out.print(" "); 
} 
+0

それは複雑なプログラムです。私はインストールし、あなたが言っていることを行うが、私は多くのステップが私をcenfusedにする。 – MANAL

関連する問題