忙しいというのに、思いついたら試さずにはいられない!
インスタンスの説明でよくでてくる鯛焼きのおはなしです。
オブジェクト指向っぽく書くとこうなる気がする……?というもの。
仮定としてはこんなかんじ。
- 鯛焼き機が2種類ある。
- 鯛焼き機Aは1回焼くたびに50個焼ける。絶対壊れない。
- 鯛焼き機Bは1回に100個焼ける。でも1%の確率で壊れる
- それぞれに100回焼かせる。Bは壊れたらその時点でお休み。
- 100回焼き勝負をの勝敗をカウント。それを10回実施して勝敗数を表示する。
ごめんね…あまりいい問題思いつかなくて…
結果はどんな感じになると思いますですか???
適当に連打した感じでは 3:7 、4:6でBが勝つほうが多かったです。
2:8以上でBが圧勝するのは結構あり、Aが勝つのはあんまり見ないという感じ。
実行結果です。
それでは肝心のソースです。4つのクラスから出来てます。
継承?は習ってないので、いまのところこれが限界。
Main.java
public class Main { public static void main(String[] args) { Judge j = new Judge(); for (int k = 0 ; k<10 ; k++){ TaiyakiBoxA boxA = new TaiyakiBoxA() ; TaiyakiBoxB boxB = new TaiyakiBoxB(); for(int i = 0 ; i<100;i++){ boxA.yaku(); //Bはこわれてなかったら焼く if(boxB.status == true){ boxB.yaku(); } } //100回焼きの結果表示 j.result(boxA, boxB); } //総合結果発表 j.sumResult(); } }
TaiyakiBoxA.java
public class TaiyakiBoxA { int count = 0; Boolean status = true; void yaku(){ this.count += 50 ; } }
TaiyakiBoxB.java
public class TaiyakiBoxB { int count = 0; Boolean status = true; void yaku(){ this.count += 100 ; int rnd = new java.util.Random().nextInt(99) +1; if (rnd == 1){ this.status = false ; } } }
Judge.java
public class Judge { int aWin = 0; int bWin = 0; int draw = 0; void result (TaiyakiBoxA a , TaiyakiBoxB b){ String str ; if (a.count > b.count){ str = "Aの勝ち!"; this.aWin += 1; }else if(b.count > a.count){ str = "Bの勝ち!"; this.bWin += 1; }else{ str = "引き分け!!"; this.draw +=1 ; } System.out.println("A:" + a.count + "個" + " " +"B:" + b.count + "個" + " " + str ); } void sumResult(){ System.out.println("Aの勝利数:" + this.aWin + " " +"Bの勝利数" + this.bWin + " 引き分け" + this.draw); } }
はて。。。なんで、これ作ったのか忘れてしまいました…
え、えと オブジェクト指向比喩を使っで説明してくれるのは
このMain.javaのすっきり感を伝えたいからのようなのです。
(少なくとも先生は)
Mainだけ追っていくと、Boxに焼かせて、勝敗の審判をJudgeさんに任せている。
これが現実と同じように見えるのだそうです。
書いておきながら自分であんまり腑に落ちてないですが
普通に書いたら違いがわかるのかも???
いつか作って見るかも!
いつかはこないフラグ