Java 正面或反面练习:随机课堂
我制作了一个非常简单的随机发生器,可以是正面的,也可以是反面的。Java 正面或反面练习:随机课堂,java,random,Java,Random,我制作了一个非常简单的随机发生器,可以是正面的,也可以是反面的。 当玩100次时,结果总是在最大60/40左右波动。换句话说:我从来没有得到过35-65,甚至25-75的结果。 我发现有一点值得注意的是,我经常得到50/50的结果。 这是什么原因 这是我的主要类(名为“play”的方法): 生成随机数的My HeadsOrTails类: package headsOrTails; import java.util.Random; public class HeadsOrTails {
当玩100次时,结果总是在最大60/40左右波动。换句话说:我从来没有得到过35-65,甚至25-75的结果。
我发现有一点值得注意的是,我经常得到50/50的结果。
这是什么原因 这是我的主要类(名为“play”的方法): 生成随机数的My HeadsOrTails类:
package headsOrTails;
import java.util.Random;
public class HeadsOrTails {
private int nrOfThrows;
private int totalTails; //0
private int totalHeads; //1
//Constructor
public HeadsOrTails(int nrOfThrows){
this.nrOfThrows = nrOfThrows;
}
public int getTotalTails(){
return this.totalTails;
}
public int getTotalHeads(){
return this.totalHeads;
}
public void play(){
for (int i = 0; i < this.nrOfThrows; i++) {
Random random = new Random();
int rnd = random.nextInt(2);
if(rnd == 0){
this.totalTails++;
} else {
this.totalHeads++;
}
}
}
}
包装头套;
导入java.util.Random;
公营船首帆{
私有行数;
私有整数totalTails;//0
私有整数totalHeads;//1
//建造师
公共大门栏杆(整排){
this.nrOfThrows=nrOfThrows;
}
public int getTotalTails(){
返回这个.totalTails;
}
public int getTotalHeads(){
返回这个。totalHeads;
}
公共无效播放(){
for(int i=0;i
随机类的行为应该是这样的。这些值应在所有可能的结果之间平均分配。在你的例子中是0和1。
你尝试得越少,波动就越大。所以你应该减少重复次数。我认为这是因为掷硬币的概率分布。如果你减少你的tossingloop,你会意识到分布正在远离50/50,但是如果你增加迭代次数,比如说10000次,你可能会得到一个非常接近50/50的分布。检查大数定律。
这是一个数学定律,不依赖于你写的类。我不是随机数方面的专家,但javadoc声明
Random.nextInt(int)
生成均匀分布的整数。
因此,如果尝试的次数足够多,人们会期望结果接近50/50。换言之,使用Random.nextInt(2)您看到0的可能性与看到1的可能性相同。尝试以下方法:
public class Rnd {
public static void main(final String[] args) {
int nrOfThrows = 100;
int[] diffNr = new int[nrOfThrows];
int plays = 1000;
for(int i=0; i<plays; i++) {
diffNr[play(nrOfThrows)]++;
}
System.out.println (Arrays.toString (diffNr));
}
static int play(final int nr) {
int heads = 0;
int tails = 0;
for (int i = 0; i < nr; i++) {
Random random = new Random ();
int rnd = random.nextInt (2);
if (rnd == 0) {
heads++;
} else {
tails++;
}
}
return Math.abs (heads-tails);
}
}
这或多或少是你所期望的。。你经常看不到任何差别,然后179/2=~90倍于1的差别,差别越大,可能性越小
正如其他人已经说过的,看看概率,以理解为什么会出现这种情况;-) 你将100次独立投币相加,每次投币的正面或反面概率相等。在概率中,这是n=100,p=0.5的二项分布的精确定义,描述为
k~二项(100,0.5)
。k
位于任何指定的数字对之间的概率可以精确计算到浮点限制内:
P{40 <= k <= 60} = 0.9647997998
P{35 <= k <= 65} = 0.9982100696
P{30 <= k <= 70} = 0.999967840
P{25 <= k <= 75} = 0.999999819
P{40你真的应该看看是什么。因为大多数人不是荷兰人,所以我认为用英语名称替换变量和方法名称更有意义。“我发现有一点值得注意的是,我通常得到50/50的结果。”请解释一下你的期望以及为什么你觉得这很了不起。随机数生成器的目标不是公平吗(如果没有其他指示)?除非你的意思是你对它的效果感到惊讶。看:如果你只画一次,你会在相同的值上得到100%的画。这不是更值得注意吗?我怀疑我的方法是否正确,但我现在看到,你玩得越多,你就越有可能达到50。我从来没有对概率学过很多东西,我会研究它静息测试,对我来说很新。我会更多地研究概率。谢谢。
[68, 0, 179, 0, 130, 0, 127, 0, 127, 0, 99, 0, 85, 0, 45, 0, 46, 0, 37, 0, 28, 0, 10, 0, 10, 0, 1, 0, 2, 0, 2, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, ... only zeros from here]
P{40 <= k <= 60} = 0.9647997998
P{35 <= k <= 65} = 0.9982100696
P{30 <= k <= 70} = 0.999967840
P{25 <= k <= 75} = 0.999999819