轉盤抽獎Java後端代碼__Java

來源:互聯網
上載者:User

現在轉盤抽獎的活動是層出不窮。最近也做了一個。當然這裡是一個實現的簡單例子,可以根據我們的需要去新增其他內容。

      這裡實現的方式就是根據我們設定的機率來做一個隨機數的演算法,得到我們的獎品。下面就貼上我們的代碼來直接看。

import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;import com.thinkive.base.jdbc.DataRow;public class TurnTable {static Object[][] prizeArr = new  Object[][]{          //裡面的指標轉動          {1,"一等獎",0.0001},          {2,"不要灰心",39.9994},         {3,"祝您好運",20.0},          {4,"二等獎",0.0002},          {5,"再接再厲",20.0},          {6,"運氣先攢著",10.0},          {7,"三等獎",0.0003},          {8,"謝謝參與",10.0} };Object result[] = award(prizeArr);//抽獎後返回獎品等級及獎品描述//抽獎後返回獎品等級及獎品描述  public static Object[] award(Object[][] prizeArr){      //機率數組  float obj[] = new float[prizeArr.length];      for(int i=0;i<prizeArr.length;i++){          obj[i] = Float.parseFloat(prizeArr[i][2].toString());      }      Integer prizeId = getRand(obj); //根據機率擷取獎項號碼      String msg = (String) prizeArr[prizeId][1];//獎品資訊    Integer prizeIds = prizeId +1;    System.out.println("獎品號: "+prizeIds +" 獲獎等級:"+msg);            return new Object[]{prizeId,msg};  }//根據機率擷取獎項  public static Integer getRand(float obj[]){  Integer result = null;          try {              float sum = 0.0f;//機率數組的總機率精度               float min = 0.0f;//            for(int i=0;i<obj.length;i++){            BigDecimal beforSum = new BigDecimal(Float.toString(sum));            BigDecimal objValue = new BigDecimal(Float.toString(obj[i]));            sum = beforSum.add(objValue).floatValue();            }              for(int i=0;i<obj.length;i++){//機率數組迴圈              BigDecimal db = new BigDecimal(Math.random() * (sum - min) + min);            BigDecimal b = new BigDecimal(Float.toString(obj[i]));                if(compareMethod(db,b) == -1){//中獎                     result = i;                      break;                  }else{                      sum -=obj[i];                  }              }          } catch (Exception e) {              e.printStackTrace();          }        /**         * 獎品控制碼,這裡可以控制我們的獎品的等級         * **/    return result;  }public static void main(String[] args) {DataRow data = new DataRow();//此處DataRow為封裝了的 HashMapList<DataRow> resultList = new ArrayList<DataRow>();for (int i = 0; i < 10000; i++) {int k = 1;Object result[] = award(prizeArr);//抽獎後返回角度和獎品等級String prize = "";String comment = "";for (Object object : result) {if(k==1){prize = object.toString();}else if(k==2){comment = object.toString();}k++;}if(k==3){data.set("prize", Integer.valueOf(prize)+1);data.set("comment", comment);resultList.add(data);}}}public static int compareMethod(BigDecimal a,BigDecimal b){return a.compareTo(b);}}
首先我們先來看看我們的獎品初始化,就是這段代碼了

static Object[][] prizeArr = new  Object[][]{          //裡面的指標轉動          {1,"一等獎",0.0001},          {2,"不要灰心",39.9994},         {3,"祝您好運",20.0},          {4,"二等獎",0.0002},          {5,"再接再厲",20.0},          {6,"運氣先攢著",10.0},          {7,"三等獎",0.0003},          {8,"謝謝參與",10.0} };
這裡我們可以在對象中添加更多的參數,如果你的抽獎是需要角度的或者獎品位置的那你就加入角度資料(兩個值,一個開始一個結束),同時也需要根據角度資料產生一個隨機數。

整個程式最主要的就是這一個抽獎演算法了。在這裡我們可以控制獎品的等級,數量等等,具體的需要自己去添加啦,這裡僅實現了抽獎。這裡有個小小的建議,在傳入獎品數組的時間可以把大機率的排在前面,這樣抽獎的時候演算法迴圈的次數會有一定的減少。

//根據機率擷取獎項  public static Integer getRand(float obj[]){  Integer result = null;          try {              float sum = 0.0f;//機率數組的總機率精度               float min = 0.0f;//            for(int i=0;i<obj.length;i++){            BigDecimal beforSum = new BigDecimal(Float.toString(sum));            BigDecimal objValue = new BigDecimal(Float.toString(obj[i]));            sum = beforSum.add(objValue).floatValue();            }              for(int i=0;i<obj.length;i++){//機率數組迴圈              BigDecimal db = new BigDecimal(Math.random() * (sum - min) + min);            BigDecimal b = new BigDecimal(Float.toString(obj[i]));                if(compareMethod(db,b) == -1){//中獎                     result = i;                      break;                  }else{                      sum -=obj[i];                  }              }          } catch (Exception e) {              e.printStackTrace();          }        /**         * 獎品控制碼,這裡可以控制我們的獎品的等級         * **/    return result;  }
以上就是轉盤抽獎演算法了。希望對有需要的程式員們有一定協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.