日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

红包 java_利用java发红包(1)之红包分配方法

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 红包 java_利用java发红包(1)之红包分配方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

紅包發放:

涉及繼承:

一共三個類:

user mannger member

其中后兩個類繼承user類

其中mannger需要的方法是send(發紅包)

發紅包有兩種常見的方法借用Arraylist:1,平均法 2,手氣

1.平均法,只需要將所需發放的紅包分成等份就可以了

private void average(ArrayList list, int totalMoney, int num) {

this.checkMoney(super.getRemainder() - totalMoney);

//分成num等分 int avr = totalMoney / num;

//有余則放在最后一個紅包中 int mod = totalMoney % num;

for (int i = 0; i < num - 1; i++) {

list.add(avr);

}

list.add(avr + mod);

}

2.手氣法

我們需要首先設定一個最低紅包數:2分,(分是發放的單位)我的方法是:我們首先需要有我們的基本盤,將2分分配下去,如果這個時候有剩余,存在一個變量count中。

我們則繼續分配,但是在分配中,我們每一次循環得到的隨機數money1,那么他的范圍應該是遞減的,不然有可能分配到最后,分出去的紅包大于我們發放的錢數。所以我們應該讓范圍count -= money1;

當count還有剩余時,我們隨機抽取一個紅包,將count放入

private void luck(ArrayList list, int totalMoney, int num) {

int flag = 0;

int avr = totalMoney / num;

this.checkMoney(avr);

//保住最低保證

int count = totalMoney - 2 * num;

this.average(list, 2 * num, num);

Random r = new Random();

while (count > 0 && flag < num) {

int money1 = r.nextInt(count);

count -= money1;

list.set(flag, list.get(flag) + money1);

flag ++;

}

if(count > 0){

int randomNum = r.nextInt(num);

int money2 = list.get(randomNum);

money2 += count;

list.set(randomNum,money2);

}

}

而我們的member只需要做一件事取list中的一個紅包并把它拆開,即receive方法

public void receive(ArrayList list){

Random r = new Random();

int num = r.nextInt(list.size());

int remove = list.remove(num);

super.setRemainder(remove);

}

最后我設置了五個群成員來搶紅包,下面是運行結果圖

總結

以上是生活随笔為你收集整理的红包 java_利用java发红包(1)之红包分配方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。