1. 程式人生 > >java實現隨機搶紅包

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個隨機數升序排列

0523466779
2.隨機數後一位減前一位得到差值
51823211221

   程式碼實現:

private static  List<Integer> 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<Integer> 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<Integer> aa = getMoney(180,6);
    for(int a : aa){
        System.out.println("抽取紅包金額為:"+a+"元");
    }
}
測試結果:

抽取紅包金額為:12元
抽取紅包金額為:32元
抽取紅包金額為:43元
抽取紅包金額為:44元
抽取紅包金額為:22元
抽取紅包金額為:27元