小猿圈分享使用Java模拟三道门的游戏
美國以前有一個綜藝節(jié)目。參賽者會看見三扇關閉了的門,其中一扇的后面有一輛汽車,選中后面有車的那扇門可贏得該汽車,另外兩扇門后面則各藏有一只山羊。當參賽者選定了一扇門,但未去開啟它的時候,節(jié)目主持人開啟剩下兩扇門的其中一扇,露出其中一只山羊。主持人其后會問參賽者要不要換另一扇仍然關上的門。問題是:換另一扇門會否增加參賽者贏得汽車的機會率? 以下為模擬三門問題的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; //玩的總次數(shù) int choiceCarCount = 0; //獲得車的次數(shù) int choiceGoatCount = 0; //獲得山羊的次數(shù)
//計分 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; //玩的總次數(shù)
//設置模式 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."); }//設置玩的總次數(shù) 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(); //顯示模式//循環(huán)玩多次 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(); //統(tǒng)計獲得汽車的概率 復制代碼} }
好啦,今天小猿圈關于Java學習的分享就到這里了,大家是不是感覺很神奇呢,原來這個游戲套路這么深,希望大家能夠學習到呢,記得收藏分享給身邊的人哦。
轉載于:https://juejin.im/post/5cf080bb6fb9a07edd29f7d6
總結
以上是生活随笔為你收集整理的小猿圈分享使用Java模拟三道门的游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 封装JSONP
- 下一篇: IT兄弟连 JavaWeb教程 jQue