今度は、占いのロジック本体をFortuneTellerクラスに実装します。UserInfoクラスを作成したときと同様に「Model」プロジェクトのコンテキストメニューから新規作成します。FortunerTeller.javaのソースコードはリスト3のとおりです。
リスト3:FortuneTeller.java
package to.msn.wings.jsf;
import to.msn.wings.jsf.model.UserInfo;
public class FortuneTeller
{
// 占いで使う周辺機器のリスト
private static final String[] peripherals =
{
" キーボード",
" マウス",
" ディスプレイ",
" プリンタ",
"USB フラッシュメモリ",
" 外付けフロッピーディスク",
" スキャナ"
};
public FortuneTeller()
{
}
public String tellFortune(UserInfo info)
{
int magicNumber;
// magicNumber に( 西暦* 13 + 月+ 日) を代入する。
magicNumber = info.getBirthYear().intValue() * 13;
magicNumber *= info.getBirthMonth().intValue();
magicNumber *= info.getBirthDay().intValue();
// 性別を取得し、
// 男性ならばmagicNumber を3 で割る。
// 女性ならばmagicNumber を11 で割る。
if (info.getSex().equals("M"))
{
magicNumber /= 3;
} else
{
magicNumber /= 11;
}
// 血液型を取得し、
// もしA 型ならばmagicNumber に12 を足す。
// もしB 型ならばmagicNumber に18 を足す。
// もしAB 型ならばmagicNumber に24 を足す。
// もしO 型ならばmagicNumber に30 を足す。
if (info.getBloodType().equals("A"))
{
magicNumber += 12;
} else if (info.getBloodType().equals("B"))
{
magicNumber += 18;
} else if (info.getBloodType().equals("AB"))
{
magicNumber += 24;
} else if (info.getBloodType().equals("O"))
{
magicNumber += 30;
}
// 最後に、用意されている「ラッキー周辺機器」の
// バリエーションの数で割った余りをmagicNumber に
// 代入する。
magicNumber %= peripherals.length;
return peripherals[magicNumber];
}
}
FortuneTellerクラスは、このとき、パッケージ名は「to.msn.wings.jsf」としてください。tellFortune()というメソッドだけを実装しています。このメソッドはUserInfoオブジェクトを与えて呼び出すと、UserInfoオブジェクトの情報を基に「占い」を行い、「ラッキー周辺機器」を返すという動作をします。なお、占い自体は適当な数値計算に基づいたもので、特別な根拠はありませんのでご了承ください。
次回はモデルとビューの統合について解説します。
|