我正在尝试做一个统计模拟器,首先,我想画一个从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);发布于 2016-03-24 04:23:12
您的switch语句需要break语句来防止失败。
发生的情况是,如果生成0,则a递增,然后由于没有break语句,执行“失败”到下一个case,其中b递增,最后执行再次失败,c递增。
出于同样的原因,如果生成1,则b和c都会递增。如果生成2,则仅递增c。因此,对于b,c将以100%的速度递增,对于b,它将以66%的速度递增,对于c,它将以33%的速度递增(因为只有在生成1的时候才会递增)。
有关切换语句在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]);https://stackoverflow.com/questions/36187901
复制相似问题