【问题标题】:Java - Draw numbers with same probability [duplicate]Java - 以相同的概率绘制数字[重复]
【发布时间】:2016-03-23 20:16:19
【问题描述】:

我正在尝试制作一个统计模拟器,首先,我想绘制一个从 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);

【问题讨论】:

标签: java


【解决方案1】:

您的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]);

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 2011-05-15
    • 2012-05-14
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2013-06-29
    • 2017-10-01
    相关资源
    最近更新 更多