首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟抛硬币在三尾之前获得两个头部(Java)

模拟抛硬币在三尾之前获得两个头部(Java)
EN

Stack Overflow用户
提问于 2014-03-31 02:22:40
回答 1查看 170关注 0票数 0

(注:有一些类似的问题,但我找不到确切的副本)

问题

考虑一下抛硬币的次数是任意的。你在三尾之前得到两个正面的概率是多少?

为了模拟这一点,我设置了10000000次试验,其中0是正面,1是尾部,等等。

代码语言:javascript
复制
    ArrayList<Integer> listOfTosses=new ArrayList<Integer>();
    int numTrue=0;
    int numTrials=0;

    while(numTrials<10000000)
    {
       boolean record=false;
       boolean twoHeads=false;
       int counter=2;

         listOfTosses.add((int) Math.random()*2);
         listOfTosses.add((int) Math.random()*2);

        if(listOfTosses.get(0)==0 && listOfTosses.get(1)==0)
        {
            twoHeads=true;
            record=true;
        }

        listOfTosses.add((int) Math.random()*2);

       while(record=false)
       {

          if(listOfTosses.get(counter)==0 && listOfTosses.get(counter-1)==0)
          {
            twoHeads=true;
            record=true;
          }
          if(listOfTosses.get(counter)==1 
          && listOfTosses.get(counter-1)==1
          && listOfTosses.get(counter-2)==1)                   
         {
            twoHeads=false;
            record=true;
         }
           listOfTosses.add((int) Math.random()*2);
           counter++;
      }




       if(twoHeads==true)
       {
           numTrue++;
       }


       record=false;
       twoHeads=false;
       listOfTosses.clear();

       numTrials++;

    }
    System.out.print(numTrue/10000000.0);

问题

代码编译正确,但总是给出1.0的答案(从数学上可以证明确切答案是0.7)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-31 02:42:30

一个错误:将while(record=false)更改为while(record==false)

最重要的是,您的while循环在record == false没有运行时运行。这是因为listOfTosses.get(0)listOfTosses.get(1)都被设置为0。

当您执行listOfTosses.add((int) Math.random()*2);时,它实际上等同于listOfTosses.add(((int) Math.random()) * 2);。从Math.random() < 1开始,它就变成了0。做listOfTosses.add((int) (Math.random()*2));代替。

或者,不要处理转换浮点数,而是考虑java.util.Random类。nextInt(int n)函数看起来就像您所需要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22752681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档