模拟三次掷硬币并打印出一个三尾的情况的百分比

时间:2013-08-15 17:14:00

标签: java probability coin-flipping

附件是问题:http://puu.sh/42QtI/ea955e5bef.png

就代码而言,这是我目前所拥有的

这个问题要求“计算三条尾巴的模拟百分比”,这是我坚持的部分。有人能给我一些关于接下来会取得什么进展的见解吗?

public static boolean isThreeTails(){
            Random rand = new Random();
            int numberOfTosses = 3;
            int numberOfHeads = 0;
            int numberOfTails = 0;

            for(int i = 1; i <= numberOfTosses; i++){
                int value = rand.nextInt(2);
                if(value == 0){
                    numberOfTails++;
                }else{
                    numberOfHeads++;
                }
            }
            if(numberOfTails == 3){
                return true;
            }
            else{
                return false;
            }
        }

double numTosses = 1000000; //choose whatever here
        double threeTails = 0;
        for(int i =0; i < numTosses; i++){
            if(isThreeTails()){
                 threeTails++;
            }
        }
        System.out.println("Theoretical probability of 3 Tails: " + (double) 1/8);
        System.out.println("Actual results for " + numTosses + " tosses = " + threeTails/numTosses);
编辑:在这里,我正在为三尾巴创建一个计数器。它会增加numberOfTripleTails计数器。如果它滚动“H”,则numberOfTails将简单地返回到零。但是,我的代码似乎只给出'3'作为答案。

编辑2:完成!

3 个答案:

答案 0 :(得分:2)

好吧 - 您已经运行了模拟,并且您拥有头部数量和尾巴数量的价值。现在你需要再运行一些。

每次运行模拟时,都会增加一个跟踪运行它的总次数的变量。如果尾部的数量为3,则增加另一个变量:让它称之为成功。

问题的结果是模拟运行总次数的成功。

答案 1 :(得分:1)

问题在于,“理论上,你应该在1/8的时间内得到3个尾巴”。现在它说,“好的,你知道这个理论,现在实际上是在计算机上做这个,看看你真正得到了什么。”

您要做的是多次运行此代码并跟踪您有3个尾巴的次数。取该数字并除以运行代码的总次数。这应该是模拟的百分比。

万一你不能说,我是说要在代码中执行此操作,而不是一遍又一遍地手动运行当前代码。这是一些伪代码:

threeTailsCount = 0
for i = 0; i < 1000; i++
  if currentCodeReturns3Tails
    threeTailsCount += 1;

print (threeTailsCount / 1000)

答案 2 :(得分:1)

您已编写的方法模拟三次投掷。我修改了该方法,使其现在成为可调用函数isThreeTails()

public static boolean isThreeTails(){
    Random rand = new Random();
    int numberOfTosses = 3;
    int numberOfHeads = 0;
    int numberOfTails = 0;

    for(int i = 1; i <= numberOfTosses; i++){
        int value = rand.nextInt(2);
        if(value == 0){
            numberOfTails++;
        }else{
            numberOfHeads++;
        }
    }
    if(numberOfTails == 3){
        return true;
    }
    else{
        return false;
    }
}

现在,您需要从ThreeTosses.java

的主方法调用此方法
double numTosses = 100; //choose whatever here
double threeTails = 0;
for(int i =0; i < numTosses; i++){
    if(isThreeTails()){
         threeTails++;
    }
}
System.out.println("Theoretical probability of 3 Tails: " + (double) 1/8);
System.out.println("Actual results for " + numTosses + " tosses = " + threeTails/numTosses);