package com.gztpay.controller;
import java.util.Random;
public class AwardUtil {
public static void main(String[] args) {
Object[][] prizeArr = new Object[][]{
{1,1,14,"iphone7",0},
{2,346,364,"iphone7",0},
{3,16,44,"智能手机",0},
{4,46,74,"小米2代智能手环",0},
{5,76,104,"定制雨伞",0},
{6,106,134,"公交异形卡",0},
{7,136,164,"精美茶叶礼盒",0},
{8,166,194,"生活护理套装",0.02},
{9,196,224,"5元话费",10},
{10,226,254,"2元话费",5},
{11,256,284,"1元话费",0},
{12,286,314,"积分",0},
{13,316,344,"谢谢参与",0}
};
Object[] result = award(prizeArr);//抽奖后返回角度和奖品等级
if (result != null) {
System.out.println("转动角度:"+result[0]+"\t奖项ID:"+result[1]+"\t提示信息:"+result[2]);
}else{
System.out.println("谢谢参与");
}
}
public static Object[] lotteryUtil(Object[][] prizeArr){
Object[] result = award(prizeArr);//抽奖后返回角度和奖品等级
return result;
}
//抽奖并返回角度和奖项
public static Object[] award(Object[][] prizeArr){
//概率数组
Double obj[] = new Double[prizeArr.length];
for(int i=0;i<prizeArr.length;i++){
obj[i] = Double.parseDouble(prizeArr[i][4].toString());
}
Integer prizeId = getRand(obj); //根据概率获取奖项id
//旋转角度
if (prizeId != null) {
int angle = new Random().nextInt((Integer)prizeArr[prizeId][2]-(Integer)prizeArr[prizeId][1])+(Integer)prizeArr[prizeId][1];
String msg = (String) prizeArr[prizeId][3];//提示信息
return new Object[]{angle,prizeId,msg};
}
return null;
}
//根据概率获取奖项
public static Integer getRand(Double obj[]){
Integer result = null;
try {
Double sum = 0.0;//概率数组的总概率精度
for(int i=0;i<obj.length;i++){
sum += obj[i];
}
int intValue = sum.intValue();
if (intValue<1) {
intValue= intValue + 1;
}
for(int i=0;i<obj.length;i++){//概率数组循环
int randomNum = new Random().nextInt(intValue);//随机生成0到sum的整数
if(randomNum<obj[i]){//中奖
result = i;
break;
}else{
sum -=obj[i];
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
12-01
266