对于循环,在JAVA中运行1000次程序,获得蛇眼所需的平均转鼓数
所以我早些时候把我的问题贴了出来,认为我很好,但我搞砸了,意识到我对这个问题的理解完全错了。 我不需要计算超过1000个骰子的蛇眼的平均掷骰数,但是得到一个蛇眼的平均掷骰数,超过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
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
这实际上低于我们的计算值
那么我想说什么呢