なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

オブジェクト指向を習ったばかりの初心者がJAVAで鯛焼きを焼いてみた

f:id:nazuna_0124:20170403224602p:plain

忙しいというのに、思いついたら試さずにはいられない!

インスタンスの説明でよくでてくる鯛焼きのおはなしです。


オブジェクト指向っぽく書くとこうなる気がする……?というもの。

仮定としてはこんなかんじ。

  • 鯛焼き機が2種類ある。
  • 鯛焼き機Aは1回焼くたびに50個焼ける。絶対壊れない。
  • 鯛焼き機Bは1回に100個焼ける。でも1%の確率で壊れる
  • それぞれに100回焼かせる。Bは壊れたらその時点でお休み。
  • 100回焼き勝負をの勝敗をカウント。それを10回実施して勝敗数を表示する。



ごめんね…あまりいい問題思いつかなくて…

結果はどんな感じになると思いますですか???



適当に連打した感じでは 3:7 、4:6でBが勝つほうが多かったです。


2:8以上でBが圧勝するのは結構あり、Aが勝つのはあんまり見ないという感じ。


実行結果です。

f:id:nazuna_0124:20170412224347p:plain


それでは肝心のソースです。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さんに任せている。

これが現実と同じように見えるのだそうです。


書いておきながら自分であんまり腑に落ちてないですが

普通に書いたら違いがわかるのかも??? 


いつか作って見るかも!

いつかはこないフラグ