java - 模拟抛硬币得到 2 正面 3 反面 (Java)

标签 java coin-flipping

(注意:有一些类似的问题,但我找不到完全重复的问题)

问题

考虑抛硬币任意次数。在得到 3 个反面之前得到 2 个正面的概率是多少?

代码

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

    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)。

最佳答案

一个拼写错误:更改 while(record=false)while(record==false) .

最重要的是,您的while 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));相反。

或者,不处理转换 float ,而是考虑 java.util.Random类(class)。 nextInt(int n)功能看起来像您所需要的。

关于java - 模拟抛硬币得到 2 正面 3 反面 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752681/

相关文章:

随机数生成器/硬币翻转/A-B 生成器 - 在 R 中连续运行直到 X

java - 如何从 web start 下运行的客户端获取 Java 堆栈跟踪?

字符串的 Java 输出格式

java - Netty:关闭 channel 时出现 ClosedChannelException

c - 宣布抛硬币游戏的获胜者

python - 抛一枚硬币 100 次并计算正面朝上的次数。重复此模拟 10**5 次

java - 在 Mac 中解码使用 base64 编码的文件

java - 在Java Struts 2中使用ajax/jquery将图像上传到服务器后,如何自动将图像加载到<div>中而不刷新页面?

java - for 循环内的数组,for 循环内的数组 - 抛出 ArrayIndexOutOfBoundsException

r - 从硬币翻转算法生成随机均匀随机数往往会生成比预期更多的 0