エンジニア成長日記 swaponQ

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

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

Hello, Terminal!swaponQです!

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

  • 演習 9-4

演習8-1で作成した《人間クラス》に、誕生日のフィールドとtoStringメソッドを追加せよ。

・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()]);
	}
}

・Human.java

class Human {
  //フィールド
  private String name;
  private int height;
  private int weight;
  private Day birthday;
  //コンストラクタ
  Human(String name, int height, int weight, Day birthday) {
    this.name = name;
    this.height = height;
    this.weight = weight;
    this.birthday = new Day(birthday);
  }
  //メソッド
  void putSpec() {
    System.out.printf("名前:%s\n", name);
    System.out.printf("身長:%d cm\n", height);
    System.out.printf("体重:%d kg\n", weight);
  }

  public String toString() {
		return String.format("名前:%s\n身長:%d\n体重:%d\n誕生日:%s\n"
    ,name, height, weight, birthday);
	}
}

・ex09_4.java

// 人間クラスをテストするクラス
class ex09_4 {
	public static void main(String[] args) {
		Human my = new Human("swaponQ", 182, 68, new Day(2000,1,1));
    System.out.print(my.toString());
	}
}


・実行結果

名前:swaponQ
身長:182
体重:68
誕生日:2000年01月01日(土)

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

Goodbye, Terminal… swaponQでした!