Biorhythmクラスの変数宣言とコンストラクタまずは変数宣言です。最初に
private static final int PHYSICAL_PERIOD = 23; private static final int SENSITIVITY_PERIOD = 28; private static final int INTELLECTUAL_PERIOD = 33;
と身体・感情・知性の周期をfinal修飾子を付けて定数として宣言します。別に定数宣言しなくても良いのですがマジックナンバーを埋めこむのが嫌だったのでこうしています。
次に前項で考えたインスタンス変数を宣言します。
private int birthdayYear, birthdayMonth, birthdayDate; private int calcYear, calcMonth, calcDate;
「何でprivateにしてるの?」と言われると明確に答えられないんですが「カプセル化や情報隠蔽のためです」と私も良く理解していない言葉を挙げて逃げときます。
続いてコンストラクタを見ときましょう。引数に何も指定しない場合は
public Biorhythm() {
birthdayYear = 1969;
birthdayMonth = 12;
birthdayDate = 12;
Date d = new Date();
calcYear = d.getYear() + 1900;
calcMonth = d.getMonth() + 1;
calcDate = d.getDate();
}
と「誕生日」に1969年12月12日(私の誕生日)を「バイオリズムを計算する日」にアプレットを実行させた日を設定します。
ところで。java.util.Date.getYear()で年を求めると西暦から1900引いた値が返ってきます。つまり1997年だったら97が返り値になります。そこで、
calcYear = d.getYear() + 1900;
と1900を加えています。また、java.util.Dateでは月が0から始まるため、例えば12月の場合にjava.util.Date.getMonth()は11を返します。それゆえ
calcMonth = d.getMonth() + 1;
と1を加えています。
引数に「誕生日」を指定した場合は
public Biorhythm(int birthdayYear, int birthdayMonth, int birthdayDate) {
this();
this.birthdayYear = birthdayYear;
this.birthdayMonth = birthdayMonth;
this.birthdayDate = birthdayDate;
}
で処理します。まず
this();
でさっき定義した引数なしのコンストラクタを呼び出し「誕生日」と「バイオリズムを計算する日」をデフォルト値にします。続いて
this.birthdayYear = birthdayYear; this.birthdayMonth = birthdayMonth; this.birthdayDate = birthdayDate;
で引数を誕生日にセットします。
引数に「誕生日」と「バイオリズムを計算する日」の両方を指定した場合は
public Biorhythm(int birthdayYear, int birthdayMonth, int birthdayDate,
int calcYear, int calcMonth, int calcDate) {
this.birthdayYear = birthdayYear;
this.birthdayMonth = birthdayMonth;
this.birthdayDate = birthdayDate;
this.calcYear = calcYear;
this.calcMonth = calcMonth;
this.calcDate = calcDate;
}
と単純に各インスタンス変数に値をセットします。