BohYoh.comトップページへ

Javaによるアルゴリズムとデータ構造

戻る  

演習2-10の解答

class YMD  {
  int y ;  /* 西暦年 */
  int m ;  /* 月(1~12)*/
  int d ;  /* 日(1~31)*/
}
 右に示すように、西暦年月日をフィールドとしてもつクラスに対して、以下のコンストラクタおよびメソッドを作成せよ。
 ・コンストラクタ(与えられた日付に設定)
   YMD(int y, int m, int d)
 ・n日後の日付を返す
   YMD after(int n)
 ・n日前の日付を返す
   YMD before(int n)
 この他にも、いろいろなメソッドを設計して作成せよ。

// 演習2-10 // 日付クラス import java.util.Scanner; class YMD {     int y;     // 西暦年     int m;     // 月(1~12)     int d;     // 日(1~31)     //--- 各月の日数 ---//     static int[][] mdays = {         {312831303130313130313031},    // 平年         {312931303130313130313031},    // 閏年     };     //--- 西暦year年は閏年か(閏年:1/平年:0) ---//     static int isLeap(int year) {         return (year % == && year % 100 != || year % 400 == 00;     }     //--- コンストラクタ(与えられた日付に設定)---//     YMD(int y, int m, int d) {         this.y = y;         this.m = m;         this.d = d;     }     //--- n日後の日付を返す ---//     YMD after(int n) {         YMD temp = new YMD(this.y, this.m, this.d);         if (n < 0)             return (before(-n));         temp.d += n;         while (temp.d > mdays[isLeap(temp.y)][temp.m - 1]) {             temp.d -= mdays[isLeap(temp.y)][temp.m - 1];             if (++temp.m > 12) {                 temp.y++;                 temp.m = 1;             }         }         return temp;     }     //--- n日前の日付を返す ---//     YMD before(int n) {         YMD temp = new YMD(this.y, this.m, this.d);         if (n < 0)             return (after(-n));         temp.d -= n;         while (temp.d < 1) {             if (--temp.m < 1) {                 temp.y--;                 temp.m = 12;             }             temp.d += mdays[isLeap(temp.y)][temp.m - 1];         }         return temp;     }     public static void main(String[] args) {         Scanner stdIn = new Scanner(System.in);         System.out.print("日付を入力してください。\n");         System.out.print("年:");  int y = stdIn.nextInt();         System.out.print("月:");  int m = stdIn.nextInt();         System.out.print("日:");  int d = stdIn.nextInt();         YMD date = new YMD(y, m, d);         System.out.print("何日前/後の日付を求めますか:");         int n = stdIn.nextInt();         YMD d1 = date.after(n);         System.out.printf("%d日後の日付は%d年%d月%d日です。\n", n, d1.y, d1.m, d1.d);         YMD d2 = date.before(n);         System.out.printf("%d日前の日付は%d年%d月%d日です。\n", n, d2.y, d2.m, d2.d);     } }


戻る