美国以前有一个综艺节目。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率? 以下为模拟三门问题的Java代码。 import java.util.Scanner; import java.text.DecimalFormat; import java.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 { int firstChoicePosition = 0; //首次选择的门 int lastChoicePosition = 0; //最终选择的门

//选择一个门 public void choiceDoor() { firstChoicePosition = (int)(Math.random()*100)%3; lastChoicePosition = firstChoicePosition; }

//更换为另一个门 public void changeDoor(int firstGoatPosition) { lastChoicePosition = 3 - firstChoicePosition - firstGoatPosition; } }

//主持人 class Presenter { int firstGoatPosition = 0; //主持人打开的门

//打开后面为山羊的门 public void openFirstGoatPosition (String[] threeDoor,int playerFirstChoicePosition) { 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,int playLastChoicePosition) { 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("Choice Car Count: " + choiceCarCount); System.out.println("Choice Car Rate : " + df.format((float)choiceCarCount/playCount)); } }

//设置模式 class Moder { String mode = ""; //模式,A:换门,B:不换门 int playTotalCount = 0; //玩的总次数

//设置模式 public void setMode() { Scanner sc = new Scanner(System.in);

//设置选门模式
while(!mode.equals("A") && !mode.equals("B")) {System.out.println("Plase input mode: A[Change]  B[Don't Change]");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 = new Scanner(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 = new ThreeDoor(); //三门 Player player = new Player(); //玩家 Presenter presenter = new Presenter(); //主持人 Scorer scorer = new Scorer(); //计分者 Moder moder = new Moder(); //设置模式者

moder.setMode();  //设置模式
moder.showMode(); //显示模式//循环玩多次
for(int i=0; i<moder.playTotalCount; 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学习的分享就到这里了,大家是不是感觉很神奇呢,原来这个游戏套路这么深,希望大家能够学习到呢,记得收藏分享给身边的人哦。

转载于:https://juejin.im/post/5cf080bb6fb9a07edd29f7d6

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

  1. 小猿圈分享利用python网络爬虫获取网易云歌词

    今天小猿圈给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本 ...

  2. 小猿圈python视频_小猿圈分享学习Python的最佳方式

    原标题:小猿圈分享学习Python的最佳方式 python现在是世界上功能最多的编程语言之一,可以是用Python编辑应用程序,游戏.算法程序.还可以编程一个机器人,学习Python可以担任软件工程师 ...

  3. 小猿圈之常见java面试题总结,你学会了吗?

    今年的6月份又到了,又是一年一度的毕业季,但是你真的做好准备了吗?.应届毕业生很多,怎么让你自己在这群人中脱颖而出呢?那你就要做万分的准备,不打没准备的仗,下面小猿圈java讲师为你总结了常见的jav ...

  4. 猿圈笔试系统java_小猿圈分享Java面试题

    马上又到毕业季了,很多同学都很迷茫,不知道该选择哪个方向,也有的同学害怕找不到工作,今天小猿圈就给大家分享一下关于初学者的Java面试题 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几 ...

  5. 小猿圈之学习java web需要有什么基础?

    有很多人想学java,因为java虽然已经火了多年,但是其发展前景还是很不错的,有很大一部分人选择走java web方向,那么java web应该提前掌握哪些知识呢?小猿圈加加下面说一下. 首先找准自 ...

  6. mysql 保留5位小数_小猿圈分享-MySQL保留几位小数的4种方法

    今天小猿圈给大家分享的是MySQL使用中4种保留小数的方法,希望可以帮助到大家,让大家的工作更加方便. 1 round(x,d) 用于数据x的四舍五入, round(x) ,其实就是round(x,0 ...

  7. bigdecimal除法保留4位小数_小猿圈分享-MySQL保留几位小数的4种方法

    今天小猿圈给大家分享的是MySQL使用中4种保留小数的方法,希望可以帮助到大家,让大家的工作更加方便. 1 round(x,d) 用于数据x的四舍五入, round(x) ,其实就是round(x,0 ...

  8. 前端 鼠标一次移动半个像素_小猿圈分享2019年前端JavaScript面试题(三)

    上篇文章小猿圈前端讲师为你分享了前端面试中js遇到的一些基础问题,接下来给大家讲解的就是前端基础和理论问题都有哪些,想学习web前端就来小猿圈自学吧,里面有全面的技术指导,还有专业的老师为你解答问题. ...

  9. 小猿圈分享适合零基础学python的书籍

    近几年python这门语言可谓是出尽了风头,排名越来越靠前,用的人越来越多,所以市面上培训python的机构也数不胜数,当人了有些人不方便去参加培训班的同学,就选择了自学,今天小猿圈就给大家分享. 一 ...

最新文章

  1. 是时候拨开迷雾,看清5G当下的真面目了
  2. [大山中学模拟赛] 2016.9.10
  3. hive表指定分区字段搜索_Spark SQL解析查询parquet格式Hive表获取分区字段和查询条件...
  4. 尴尬君正,是如何被“创新”带到沟里去的?
  5. CTF入门--二进制
  6. 简单FTP服务器(ccd) v1.0
  7. angular2+typescript在asp.net MVC Web项目上的实现
  8. Spring Security 5.0.0正式发布
  9. FFmpeg之yuv旋转(十九)
  10. android 入门 (分析: 非匿名内部类 监听功能的实现)
  11. Linux 下载百度网盘大文件
  12. [狗子的PM之路]数据埋点
  13. python几个循环_python 几个循环的效率测试
  14. 多款AGV模型3D图纸 零件图,装配图都有 潜伏式,搬运AGV,内部结构详细
  15. Debian 8 麦克风无声音的解决过程
  16. 校内题目T2695 桶哥的问题——吃桶
  17. python人脸识别表情检测器(2):基本框架的制作
  18. PostgreSQL高效分区表实现-pg_pathman
  19. 就一个翻译功能,百度你都跟不上谷歌,无力吐槽
  20. 盘点IT行业“中国式合伙人”的离合春秋

热门文章

  1. boost::hana::on用法的测试程序
  2. boost::format模块异常处理的测试程序
  3. 模块间holder的Boost.Flyweight测试
  4. GDCM:gdcm::XMLPrivateDictReader的测试程序
  5. boost::container模块实现内存资源记录器的程序
  6. boost::callable_traits下qualified_class_of的测试程序
  7. Boost:传输文件的测试程序
  8. VTK:Texture之AnimateVectors
  9. VTK:结构化网格之StructuredGrid
  10. ListModel QML类型