java實現隨機搶紅包
阿新 • • 發佈:2018-12-22
要求:實現參與搶紅包人員可以搶到隨機金額,每個人必須搶到大於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 |
5 | 18 | 23 | 21 | 12 | 21 |
程式碼實現:
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元