目录
1.奖品实体
package com.example.demo.h5draw;
/**
* @author hanzl
* @date 2020/7/6 2:41 下午
*/
public class DrawPrize {
private Integer id;
private String name;
private Integer quantity;//数量
public DrawPrize(){}
public DrawPrize(Integer id,String name,Integer quantity){
this.id=id;
this.name=name;
this.quantity=quantity;
}
public Integer getId () {
return id;
}
public void setId (Integer id) {
this.id = id;
}
public String getName () {
return name;
}
public void setName (String name) {
this.name = name;
}
public Integer getQuantity () {
return quantity;
}
public void setQuantity (Integer quantity) {
this.quantity = quantity;
}
}
2.测试类
package com.example.demo.h5draw;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author hanzl
* @date 2020/7/6 1:52 下午
*/
public class TestH5Draw {
public static void main(String args[]){
List<DrawPrize> drawList=new ArrayList<>();
drawList.add(new DrawPrize(1,"电灯",2));
drawList.add(new DrawPrize(2,"手机",1));
drawList.add(new DrawPrize(3,"优惠券",500));
drawList.add(new DrawPrize(4,"电视",2));
drawList.add(new DrawPrize(5,"会员卡",30));
drawList.add(new DrawPrize(6,"谢谢惠顾",1000));
int k=0;
int m=0;
int g=0;
int h=0;
int l=0;
int f=0;
for(int i=0;i<10000;i++){
DrawPrize result=generateAward(drawList);
if(result.getId()==1){
k++;
}
if(result.getId()==2){
m++;
}
if(result.getId()==3){
g++;
}
if(result.getId()==4){
h++;
}
if(result.getId()==5){
l++;
}
if(result.getId()==6){
f++;
}
}
System.out.println("抽取电灯次数为"+k);
System.out.println("抽取手机次数为"+m);
System.out.println("抽取优惠券次数为"+g);
System.out.println("抽取电视次数为"+h);
System.out.println("抽取会员卡次数为"+l);
System.out.println("抽取谢谢惠顾次数为"+f);
}
/***
* 生成奖项
* @return
*/
public static DrawPrize generateAward (List<DrawPrize> drawList) {
int maxResult=drawList.stream().mapToInt(DrawPrize::getQuantity).sum();
long result = randomnum(1, maxResult);
int line = 0;
int temp = 0;
DrawPrize returnobj = null;
for (int i = 0; i < drawList.size(); i++) {
DrawPrize obj2 = drawList.get(i);
int c = obj2.getQuantity();
temp = temp + c;
line = maxResult - temp;
if (c != 0) {
if (result > line && result <= (line + c)) {
returnobj = obj2;
break;
}
}
}
return returnobj;
}
// 获取2个值之间的随机数
private static long randomnum (int smin, int smax) {
int range = smax - smin;
double rand = Math.random();
return (smin + Math.round(rand * range));
}
}