エンジニア成長日記 swaponQ

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

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

Hello, Terminal!swaponQです!

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

  • 演習 9-3

第8章で作成した《銀行口座クラス(第2版)》に、口座開設日のフィールドと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()]);
	}
}

・Account.java

// 銀行口座クラス【第2版】
class Account {
	private String name;			// 口座名義
	private String no;			// 口座番号
	private long balance;		// 預金残高
  private Day day;        //口座開設日

	//--- コンストラクタ ---//
	Account(String n, String num, long z, Day d) {
		name = n;					// 口座名義
		no = num;					// 口座番号
		balance = z;				// 預金残高
    day = new Day(d);   //口座開設日
	}

	//--- 口座名義を調べる ---//
	String getName() {
		return name;
	}

	//--- 口座番号を調べる ---//
	String getNo() {
		return no;
	}

	//--- 預金残高を調べる ---//
	long getBalance() {
		return balance;
	}

  //--- 口座開設日を調べる ---//
  public Day getDay() {
    return new Day(day);
  }

	//--- k円預ける ---//
	void deposit(long k) {
		balance += k;
	}

	//--- k円おろす ---//
	void withdraw(long k) {
		balance -= k;
	}

  //--- 文字列表現を返却 ---//
	public String toString() {
		return String.format("口座名義:%s\n口座番号:%s\n預金残高:%d\n口座開設日:%s\n"
    ,name, no, balance, day);
	}
}

・ex09_3.java

// 銀行口座クラス【第2版】をテストするクラス
class ex09_3 {
	public static void main(String[] args) {
		Account my = new Account("swaponQ", "123456", 100000, new Day(2020,8,4));
    System.out.print(my.toString());
	}
}


・実行結果

口座名義:swaponQ
口座番号:123456
預金残高:100000
口座開設日:2020年08月04日(火)

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

Goodbye, Terminal… swaponQでした!