エンジニア成長日記 swaponQ

コンピュータサイエンス専攻の一般人のブログです。

新・明解 Java 入門 演習 9-2 解答

Hello, Terminal!swaponQです!

今回は演習 9-2 に取り組んでいこうと思います。

  • 演習 9-2

日付クラス第3版を利用するプログラムを作成せよ。すべてのコンストラクタの働きを確認できるようにすること。

・Day.java

//日付クラスDay【第3版】
public class Day {
	private int	year	= 1;
	private int	month = 1;
	private int	date 	= 1;
	public Day()                              { }
	public Day(int year)                      { this.year = year; }
	public Day(int year, int month)           { this(year); this.month = month; }
	public Day(int year, int month, int date) { this(year, month); this.date = date; }
	public Day(Day d)                         { this(d.year, d.month, d.date); }
	public int getYear()  { return year; }
	public int getMonth() { return month; }
	public int getDate()  { return date; }
	public void setYear(int year)   { this.year  = year; }
	public void setMonth(int month) { this.month = month; }
	public void setDate(int date)   { this.date  = date; }
	public void set(int year, int month, int date) {
		this.year  = year;
		this.month = month;
		this.date  = date;
	}
	public int dayOfWeek() {
		int y = year;
		int m = month;
		if (m == 1 || m == 2) {
			y--;
			m += 12;
		}
		return (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + date) % 7;
	}
	public boolean equalTo(Day d) {
		return year == d.year && month == d.month && date == d.date;
	}
	public String toString() {
		String[] wd = {"日", "月", "火", "水", "木", "金", "土"};
		return String.format("%04d年%02d月%02d日(%s)", year, month, date, wd[dayOfWeek()]);
	}
}

・ex09_2.java

import java.util.Scanner;

class ex09_2 {
  public static void main(String[] args) {
    Scanner stdIn = new Scanner(System.in);
    System.out.print("年:"); int y = stdIn.nextInt();
    System.out.print("月:"); int m = stdIn.nextInt();
    System.out.print("日:"); int d = stdIn.nextInt();
    Day day1 = new Day(y,m,d);
    System.out.println("day1 = " + day1);
    Day day2 = new Day(day1);
    System.out.println("day2をday1と同じ日付として作りました。");
    System.out.println("day2 = " + day2);
    if (day1.equalTo(day2))
    System.out.println("day1とday2は等しいです。");
    else
    System.out.println("dayとday2は等しくありません。");
    Day d1 = new Day();
    Day d2 = new Day(2010);
    Day d3 = new Day(2010,10);
    Day d4 = new Day(2010,10,15);
    System.out.println("d1 = " + d1);
    System.out.println("d2 = " + d2);
    System.out.println("d3 = " + d3);
    System.out.println("d4 = " + d4);
    Day[] a = new Day[3];
    for (int i = 0; i < a.length; i++) {
      a[i] = new Day();
    }
    for (int i = 0; i < a.length; i++) {
      System.out.println("a[" + i + "] = " + a[i]);
    }
  }
}


・実行結果

年:2020
月:8
日:4
day1 = 2020年08月04日(火)
day2をday1と同じ日付として作りました。
day2 = 2020年08月04日(火)
day1とday2は等しいです。
d1 = 0001年01月01日(月)
d2 = 2010年01月01日(金)
d3 = 2010年10月01日(金)
d4 = 2010年10月15日(金)
a[0] = 0001年01月01日(月)
a[1] = 0001年01月01日(月)
a[2] = 0001年01月01日(月)

今回は以上です。お疲れ様でした!
次回は演習 9-3 です。

Goodbye, Terminal… swaponQでした!