gpt4 book ai didi

Java - 以相同的概率抽取数字

转载 作者:行者123 更新时间:2023-12-01 10:09:58 25 4
gpt4 key购买 nike

我正在尝试制作一个统计模拟器,首先,我想抽取一个从 0 到 2 的数字,其中每个数字都有相同的抽取几率(即 0 = 33.33%、1 = 33.33% 和2 = 33.33%),但是当我运行我的代码(一百万次绘制)时,我总是得到 0 被绘制的概率为 33%,1 被绘制的概率为 66%,c 被绘制的概率为 1%。

对于一百万次抽奖,我预计(存在一些差异)每个号码的中奖率都接近 33%。

这是我得到的代码:

    Random number = new Random();
int sorteio;
int a=0;
int b=0;
int c=0;
int n;


for (n=0;n<1000000;n++){
sorteio = number.nextInt(3);

switch (sorteio){
case 0:
a++;
case 1:
b++;
case 2:
c++;
}

}
System.out.println("a: " + a + " b: " + b + " c: " + c);

最佳答案

您的 switch 语句需要 break 语句来防止失败。

发生的情况是,如果生成 0,a 就会递增,然后由于没有 break 语句,执行会“失败”到下一个 case,其中 b 递增,最后执行再次失败,并且 c 递增。

出于同样的原因,如果生成 1,则 bc 都会递增。如果生成 2,则仅递增 c。因此,c 将在 100% 的情况下递增,b 将递增 66%,而 c 将递增 33%(因为它在生成 1 时递增)。

有关 switch 语句在 Java 中如何工作的更多信息,请查看 this tutorial .

试试这个:

switch (sorteio) {
case 0:
a++;
break;
case 1:
b++;
break;
case 2:
c++;
break;
}
<小时/>

如果您只想在 switch 中增加 int 的值,那么您最好只使用数组:

int[] count = new int[3];
for(int i=0; i<1000000; ++i) {
count[number.nextInt(3)]++;
}

System.out.printf("a: %d, b: %d, c: %d%n", count[0], count[1], count[2]);

关于Java - 以相同的概率抽取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36187901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com