자바 랜 덤 추첨 상품 도구 류 실현
무 작위 로 상품 을 추첨 하 다.
전체적인 사고방식:
1.상품 집합+확률 비례 집합
2.상품 을 집합 중의 순서 확률 에 따라 비례 구간 으로 계산 하여 비례 집합 에 넣는다.무 작위 수 를 만들어 정렬 합 니 다.
3.정렬 후 그 구간 에 무 작위 로 놓 으 면 그 구간 의 상품 이 당 첨 되 었 음 을 나타 낸다.
4.돌아 오 는 난수 가 집합 에 있 는 색인 입 니 다.이 색인 은 상품 집합 에 있 는 색인 입 니 다.
5.비례 구간 의 계산 은 확률 을 더 해서 얻 을 수 있다.
//
public class Gift {
private String id; // Id
private String name; //
private double prob; //
private String type;
}
실현 방법:
public class DrawLotteryUtil {
public static int drawGift(List<Gift> giftList){
if(null != giftList && giftList.size()>0){
List<Double> orgProbList = new ArrayList<Double>(giftList.size());
for(Gift gift:giftList){
//
orgProbList.add(gift.getProb());
}
return draw(orgProbList);
}
return -1;
}
public static int draw(List<Double> giftProbList){
List<Double> sortRateList = new ArrayList<Double>();
//
Double sumRate = 0D;
for(Double prob : giftProbList){
sumRate += prob;
}
if(sumRate != 0){
double rate = 0D; //
for(Double prob : giftProbList){
rate += prob;
// ( 1)
sortRateList.add(rate / sumRate);
}
// ,
double random = Math.random();
sortRateList.add(random);
Collections.sort(sortRateList);
//
return sortRateList.indexOf(random);
}
return -1;
}
//
public static void main(String[] args) {
Gift iphone = new Gift();
iphone.setName("10000 ");
iphone.setProb(0.9D);
Gift thanks = new Gift();
thanks.setName("28888 ");
thanks.setProb(0.04D);
Gift vip = new Gift();
vip.setName("66666 ");
vip.setProb(0.03D);
Gift vip1 = new Gift();
vip1.setName("88888 ");
vip1.setProb(0.02D);
Gift vip2 = new Gift();
vip2.setName("100000 ");
vip2.setProb(0.01D);
List<Gift> list = new ArrayList<Gift>();
list.add(vip);
list.add(thanks);
list.add(iphone);
list.add(vip1);
list.add(vip2);
for(int i=0;i<20;i++){
int index = drawGift(list);
System.out.println(" :"+list.get(index).getName()+"*** :"+list.get(index).getProb());
}
}
}
테스트 결과:
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:66666 *** :0.03
:28888 *** :0.04
:10000 *** :0.9
:28888 *** :0.04
:10000 *** :0.9
:88888 *** :0.02
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
:10000 *** :0.9
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.