자바 랜 덤 추첨 상품 도구 류 실현

본 논문 의 사례 는 자바 가 무 작위 로 상품 도구 류 를 추출 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
무 작위 로 상품 을 추첨 하 다.

전체적인 사고방식:
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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기