红包 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)之红包分配方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑板粉笔字教师节PPT模板
- 下一篇: 外接显示器亮度调节