Java实现微信抢红包

要求:实现参与抢红包人员可以抢到随机金额,每个人必须抢到大于0的金额。
思路:1.生成(总人数-1)个范围在0到总金额的随机数,组成数组arrList;

         2.通过冒泡排序按照从小到大排序;

         3.将排序后的数组按照arrList[i+1]-arrList[i]方式取出(总人数-1)个差值,组成一个新数组newArrList

            (注意:取出的第一个数据为第一个随机数,即arrList[1]-0)

         4.总金额减去第三步newArrList所有数据之和,得到差值作为newArrList最后一个元素;

         5.得到一个数组newArrList;

         6.接收到抽奖请求后,按顺序取newArrList中的值作为该参与者的红包金额。

思路实现图:(以6个人为例)

1.生成5个随机数升序排列

0 5 23 46 67 79
2.随机数后一位减前一位得到差值
5 18 23 21 12 21
代码实现:

private static List getMoney(Integer totalMoney,Integer totalPersons){
Random random = new Random();
int[] randomNumList = new int[totalPersons-1];
for(int i=0;i<totalPersons-1;i++){
Integer randomNum = random.nextInt(totalMoney);
randomNumList[i] = randomNum;
}
int temp = 0;
for(int i=0;i<randomNumList.length-1;i++){
for(int j=0;j<randomNumList.length-1-i;j++){
if(randomNumList[j+1]<randomNumList[j]){
temp = randomNumList[j];
randomNumList[j] = randomNumList[j+1];
randomNumList[j+1] = temp;
}
}
}
List moneyList = new ArrayList<>();
int total = 0;
for(int i=0;i<randomNumList.length;i++){
if(i==0){
moneyList.add(randomNumList[0]);
total+=randomNumList[0];
}else{
int tempNum = randomNumList[i]-randomNumList[i-1];
moneyList.add(tempNum);
total+=tempNum;
}
}
moneyList.add(totalMoney-total);
return moneyList;
}
测试验证:
public static void main(String[] args){
List aa = getMoney(180,6);
for(int a : aa){
System.out.println(“抽取红包金额为:”+a+“元”);
}
}
测试结果:
抽取红包金额为:9元
抽取红包金额为:24元
抽取红包金额为:16元
抽取红包金额为:6元
抽取红包金额为:113元
抽取红包金额为:12元
[6, 9, 12, 16, 24, 113]
Process finished with exit code 0
——————————————

猜你喜欢

转载自blog.csdn.net/weixin_45029766/article/details/102591673