我正在使用它来尝试创建加权随机:
int choice_weight[] = { 25, 25, 25, 25 };
int num_choices = choice_weight.length;
Random random = new Random();
int i;
int sum_of_weight = 0;
for (i = 0; i < num_choices; i++) {
sum_of_weight += choice_weight[i];
}
int rnd = random.nextInt(sum_of_weight);
System.out.println(rnd);
for (i = 0; i < num_choices; i++) {
if (rnd < choice_weight[i])
rnd -= choice_weight[i];
}
我正在使用swtich语句来测试并查看案例是否:
case 1:
case 2:
case 3:
case 4:
问题是random.nextInt(sum_of_weight)
正在生成100到0之间的数字,这是基于我的4个权重25,25,25,25。我需要一个数字来匹配其中一个可能的案例1-4?或者我应该更改我的测试方法?
这整个过程让我感到困惑,一些帮助将不胜感激。
基本上,选择一个特定数字的概率是25%。此外,我将在整个程序的生命周期中更改百分比。
答案 0 :(得分:1)
在测试你的号码时,你不应该“增加”你的范围吗?即:
System.out.println(rnd);
int winner=0;
int rangeHigh=0;
for (i = 0; i < num_choices; i++) {
rangeHigh += choice_weight[i];
if (rnd < rangeHigh){
winner = (i+1);
break;
}
}
System.out.println("lucky winner number: " + winner);
基本上你在0-99之间生成一个数字,并检查你的值是否为:
1. < 25 //bucket 1 - [0-24]
2. < 50 //bucket 2 - [25-49]
3. < 75 //bucket 3 - [50-74]
4. < 100 //bucket 4 - [75-99]
第二次看你的方式也会起作用(带调整):
int winner = 0;
for (i = 0; i < num_choices; i++) {
if (rnd < choice_weight[i]){
winner = i+1;
break;
}
rnd -= choice_weight[i];
}
答案 1 :(得分:0)
我想测试4个案例,你可以测试1到25之间的数字; 25 - 50; 51-75;和76-100。
您可以将开关设置为:
case 1 ((num >1)&&(num<25))...
等等......这样你就会有一个测试结果。
希望有所帮助。