小猿圈分享使用Java模拟三道门的游戏

美国以前有一个综艺节目。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?

以下为模拟三门问题的Java代码。

importjava.util.Scanner;

importjava.text.DecimalFormat;

importjava.text.DecimalFormatSymbols;

//三门class ThreeDoor {

  String[] threeDoor =

new String[3]; //三门


//设置门后的奖品


public void setPrize() {


int carPosition = (int)(Math.random()*100)%3;

    threeDoor[

0] = "Goat";

    threeDoor[

1] = "Goat";

    threeDoor[

2] = "Goat";

    threeDoor[carPosition] =

"Car";

  }

}

//玩家class Player {


intfirstChoicePosition = 0; //首次选择的门


intlastChoicePosition = 0;  //最终选择的门


//选择一个门


public void choiceDoor() {

    firstChoicePosition = (

int)(Math.random()*100)%3;

    lastChoicePosition =firstChoicePosition;

  }


//更换为另一个门


public void changeDoor(intfirstGoatPosition) {

    lastChoicePosition =

3-firstChoicePosition - firstGoatPosition;

  }

}

//主持人class Presenter {


intfirstGoatPosition = 0;  //主持人打开的门


//打开后面为山羊的门


public void openFirstGoatPosition (String[]

threeDoor,intplayerFirstChoicePosition) {


if(threeDoor[playerFirstChoicePosition].equals("Car")) {

      do {

        firstGoatPosition = (

int)(Math.random()*100)%3;

      }

while(firstGoatPosition == playerFirstChoicePosition);

    }

else{


for(int i=0;i<3;i++)


if(!threeDoor[i].equals("Car") &&i!=playerFirstChoicePosition)

          firstGoatPosition = i;

    }

  }

}

//计分牌class Scorer {


int playCount = 0;        //玩的总次数


int choiceCarCount

= 0;   //获得车的次数


int choiceGoatCount

= 0;  //获得山羊的次数


//计分


public void score(String[]

threeDoor,intplayLastChoicePosition) {

    playCount++;


if(threeDoor[playLastChoicePosition].equals("Car"))

      choiceCarCount++;


else

      choiceGoatCount++;

  }


//计算获得车的概率


public void statistics() {

    DecimalFormat df =

new DecimalFormat("##.00%");

    System.out.println(

"Choice

Goat Count: "+ choiceGoatCount);

    System.out.println(

"ChoiceCar  Count: "+choiceCarCount);

    System.out.println(

"ChoiceCar  Rate : " + df.format((float)choiceCarCount/playCount));

  }

}

//设置模式class Moder {

  String mode =

"";       //模式,A:换门,B:不换门


int playTotalCount

= 0; //玩的总次数


//设置模式


public void setMode() {

    Scanner sc =

newScanner(System.in);


//设置选门模式


while(!mode.equals("A") &&

!mode.equals("B")) {

      System.out.println(

"Plaseinput mode: A[Change]  B[Don'tChange]");

      mode = sc.nextLine();


if(!mode.equals("A") &&

!mode.equals("B"))

        System.out.println(

"Input

Error, Input again.");

    }


//设置玩的总次数


while(playTotalCount<=0) {

      System.out.println(

"Plase

input play total count: ");


try{

        Scanner scCnt =

newScanner(System.in);

        playTotalCount = scCnt.nextInt();

      }

catch(Exception e) {

        playTotalCount =

0;

      }


if(playTotalCount<=0)

        System.out.println(

"Input

Error, Input again.");

    }

    System.out.println();

  }


//显示设置的模式


public void showMode() {


if(mode.equals("A"))

      System.out.println(

"Mode:

[Change]");


else

      System.out.println(

"Mode:

[Don't Change]");

    System.out.println(

"Play Total

Count: "+ playTotalCount);

    System.out.println();

  }

}

//main程序class ThreeDoorDemo {


public static void main(String[] args){

    ThreeDoor threeDoor =

newThreeDoor();  //三门

    Player player =

newPlayer();           //玩家

    Presenter presenter =

newPresenter();  //主持人

    Scorer scorer =

newScorer();           //计分者

    Moder moder =

newModer();              //设置模式者

    moder.setMode(); 

//设置模式

    moder.showMode();

//显示模式


//循环玩多次


for(int i=0;i

      threeDoor.setPrize();

//设置门后奖品

      player.choiceDoor(); 

//玩家选择一个门


//主持人打开一扇是山羊的门

     presenter.openFirstGoatPosition(threeDoor.threeDoor,player.firstChoicePosition);


if(moder.mode.equals("A"))

       player.changeDoor(presenter.firstGoatPosition);

//玩家换另外一扇门


//计分

     scorer.score(threeDoor.threeDoor,player.lastChoicePosition);

    }

    scorer.statistics(); 

//统计获得汽车的概率

  }

}


好啦,今天小猿圈关于Java学习的分享就到这里了,大家是不是感觉很神奇呢,原来这个游戏套路这么深,希望大家能够学习到呢,记得收藏分享给身边的人哦。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,317评论 0 9
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 6,960评论 0 9
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,860评论 0 2
  • 第一章 初识javaJAVA 第一讲:什么是程序?:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的...
    人子日月几点阅读 514评论 0 1
  • 于千万人之中遇见你所要遇见的人,于千万年之中,时间的无涯的荒野里,没有早一步,也没有晚一步,刚巧赶上了,对的时间遇...
    Mayday海星阅读 176评论 0 0