Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于循环,在JAVA中运行1000次程序,获得蛇眼所需的平均转鼓数_Java_Loops_For Loop - Fatal编程技术网

对于循环,在JAVA中运行1000次程序,获得蛇眼所需的平均转鼓数

对于循环,在JAVA中运行1000次程序,获得蛇眼所需的平均转鼓数,java,loops,for-loop,Java,Loops,For Loop,所以我早些时候把我的问题贴了出来,认为我很好,但我搞砸了,意识到我对这个问题的理解完全错了。 我不需要计算超过1000个骰子的蛇眼的平均掷骰数,但是得到一个蛇眼的平均掷骰数,超过1000次。 我对如何做到这一点有点迷茫。 我试过这个: public class RollDiceforloop { public static void main(String[] args) { int die1, die2, snakeye, rolls, game; s

所以我早些时候把我的问题贴了出来,认为我很好,但我搞砸了,意识到我对这个问题的理解完全错了。 我不需要计算超过1000个骰子的蛇眼的平均掷骰数,但是得到一个蛇眼的平均掷骰数,超过1000次。 我对如何做到这一点有点迷茫。 我试过这个:

public class RollDiceforloop {
    public static void main(String[] args) {

        int die1, die2, snakeye, rolls, game;
        snakeye = 0;

        die1 = 0;
        die2 = 0;
        rolls = 0;

        for (game = 0; game < 1000; game++) {
            die1 = (int)(Math.random()*6)+1;
            die2 = (int)(Math.random()*6)+1;
            if (die1 != 1 && die2 != 1); {
                rolls +=1;
            }
            if (die1 == 1 && die2 == 1) {
                snakeye +=1;
                rolls +=1;
            }
        }
        float average = snakeye / (float) rolls;

        TextIO.putln(""+snakeye+" Snake Eyes over "+game+" games, with an average of "+average+" rolls required to get a Snake Eye.");
    }
}
公共类循环{
公共静态void main(字符串[]args){
智力骰子1,骰子2,蛇,掷骰子,游戏;
snakeye=0;
die1=0;
die2=0;
滚动=0;
用于(游戏=0;游戏<1000;游戏++){
die1=(int)(Math.random()*6)+1;
die2=(int)(Math.random()*6)+1;
如果(die1!=1&&die2!=1){
转鼓+=1;
}
如果(die1==1&&die2==1){
snakeye+=1;
转鼓+=1;
}
}
浮动平均值=蛇形/(浮动)转鼓;
putln(“+snakeye+”蛇眼超过“+game+”游戏,获得蛇眼平均需要“+average+”掷骰);
}
}

但是我没有得到正确的结果。我对如何做到这一点有些茫然。请帮忙?

如果你理解了你的代码,我想你可能想在获得蛇眼后开始数数,否则就增加掷骰数。另外,当只有一个卷等于一时,您可能需要增加计数器。这两件事可能会影响你的成绩

if (die1 == 1 && die2 == 1) {
    snakeye ++;
    rolls = 0;
} else {
    rolls ++;
}

如果你理解了你的代码,我想你可能想在获得蛇眼后开始数数,否则就增加掷骰的数量。另外,当只有一个卷等于一时,您可能需要增加计数器。这两件事可能会影响你的成绩

if (die1 == 1 && die2 == 1) {
    snakeye ++;
    rolls = 0;
} else {
    rolls ++;
}

你的逻辑有点错误。你需要做N次测试(游戏),每次测试都要等到蛇眼出现,然后计算必要的掷骰数。你可以说你需要等待,而没有蛇出现。要计算平均值,您需要存储每次测试的结果

示例:

public static void main( String[] args )
{
  int dice1;
  int dice2;
  // The amount of tests
  final int SIZE = 10000000;

  // store all results we got from a single test
  int[] result = new int[SIZE];

  // loop through the tests
  for(int i = 0; i < SIZE;i++) 
  {
    // initialize counter for every test
    int rolls = 0;
    do 
    {
      // roll counter increases
      rolls++;
      dice1 = (int)(Math.random()*6)+1;
      dice2 = (int)(Math.random()*6)+1;
      // check if condition is met.
    }while(dice1 != 1 || dice2 != 1);
    // store the result of the test
    result[i] = rolls;
  }
  // calculate the average amount of rolls necessary
  double avg = Arrays.stream( result ).sum() / (double)SIZE;
  System.out.println( avg );
}
publicstaticvoidmain(字符串[]args)
{
int-1;
int-2;
//测试量
最终整数大小=10000000;
//存储我们从单个测试中获得的所有结果
int[]结果=新的int[大小];
//循环测试
对于(int i=0;i
您的逻辑有点错误。你需要做N次测试(游戏),每次测试都要等到蛇眼出现,然后计算必要的掷骰数。你可以说你需要等待,而没有蛇出现。要计算平均值,您需要存储每次测试的结果

示例:

public static void main( String[] args )
{
  int dice1;
  int dice2;
  // The amount of tests
  final int SIZE = 10000000;

  // store all results we got from a single test
  int[] result = new int[SIZE];

  // loop through the tests
  for(int i = 0; i < SIZE;i++) 
  {
    // initialize counter for every test
    int rolls = 0;
    do 
    {
      // roll counter increases
      rolls++;
      dice1 = (int)(Math.random()*6)+1;
      dice2 = (int)(Math.random()*6)+1;
      // check if condition is met.
    }while(dice1 != 1 || dice2 != 1);
    // store the result of the test
    result[i] = rolls;
  }
  // calculate the average amount of rolls necessary
  double avg = Arrays.stream( result ).sum() / (double)SIZE;
  System.out.println( avg );
}
publicstaticvoidmain(字符串[]args)
{
int-1;
int-2;
//测试量
最终整数大小=10000000;
//存储我们从单个测试中获得的所有结果
int[]结果=新的int[大小];
//循环测试
对于(int i=0;i
一种简单计算获得蛇的投掷次数的方法是:

int count = 0;
for (int i = 0; i < 1000; ++i)
{
    int result = 0;
    while (result != 2)
    {
        result = (int) (Math.random() * 6) + (int) (Math.random() * 6) + 2;
        ++count;
    }
}
System.out.println(count / 1000.d);
int count=0;
对于(int i=0;i<1000;++i)
{
int结果=0;
while(结果!=2)
{
结果=(int)(Math.random()*6)+(int)(Math.random()*6)+2;
++计数;
}
}
系统输出打印项次(计数/1000.d);
跑步应该会让你得到大约36轮的成绩,这基本上是预期值,因为你有1/36的机会在每一次投掷中得到一条蛇是的,因此从理论上讲,从长远来看,你会每36次投掷得到一条蛇

然而,这是一种扭曲的数学。这是否告诉你,在没有蛇的情况下投掷37次之后,你的死亡是不平衡的?或者,如果你在两次掷骰后得到一条蛇,你不知何故作弊了? 不,显然不是

这就是数学进入方程式的地方。首先我要说的是,没有办法计算出你得到一条蛇所需要的准确投掷次数是的。我们能做的是根据置信度计算概率。 这里的信心基本上是说:

我想要x%的机会得到一条蛇是的

x
是信心。有了信心,你就可以使用

1-(35/36)^n>x
,然后求解
n
,以获得一定数量的投掷,在给定的置信度下,将得到一个或多个SnakeYes。请注意,
35/36
是一个不被蛇咬的机会

我们真的很想要那条蛇是的。我们的置信度为99.9%。 通过这个公式,我们得到了n=246。所以我们需要246次投掷才能获得99.9%的机会,至少有一次是的

我们多赌一点怎么样。我们说我们很好,只有50%的机会被蛇咬。因此,我们得到
n=25

这实际上低于我们的计算值

那么我想说什么呢