如某次抽奖活动需求 中将概率分布:一等奖:二等奖:三等奖:四等奖=1:2:3:4
中将的概率分布:
代码实现
package algorithm.zhongjiang;
import java.util.ArrayList;
import java.util.List;
public class ChoosePrize {
public static int getPrize(List<Prize> list){
double sum = list.stream().mapToDouble(Prize::getPrize_weight).sum();
double random = Math.random();
//System.out.println("随机数:"+random);
double currenyMax = 0;
double max = 0;
double min = 0;
int index = -1;
for (int i = 0; i < list.size(); i++) {
currenyMax = list.get(i).getPrize_weight()/sum;
max = currenyMax + max;
if(random >= min && random <= max){
index = i;
break;
}
min = currenyMax + min;
}
return index;
}
public static void main(String[] args) {
List<Prize> prizes = new ArrayList<Prize>();
int[] result = new int[4];
Prize p1 = new Prize();
p1.setName("别墅");
p1.setPrize_weight(1);//奖品的权重设置成1
prizes.add(p1);
Prize p2 = new Prize();
p2.setName("玛莎拉蒂");
p2.setPrize_weight(2);//奖品的权重设置成2
prizes.add(p2);
Prize p3 = new Prize();
p3.setName("奥迪a9");
p3.setPrize_weight(3);//奖品的权重设置成3
prizes.add(p3);
Prize p4 = new Prize();
p4.setName("双色球彩票");
p4.setPrize_weight(4);//奖品的权重设置成4
prizes.add(p4);
for (int i = 0 ; i < 10000;i++){
int index = ChoosePrize.getPrize(prizes);
result[index] ++;
}
System.out.println("一等奖:"+result[0]);
System.out.println("二等奖:"+result[1]);
System.out.println("三等奖:"+result[2]);
System.out.println("四等奖:"+result[3]);
}
}
package algorithm.zhongjiang;
import lombok.Data;
@Data
public class Prize {
private int id;
private String name;
private int prize_amount;
private int prize_weight;
}