批注 2020-07-27 213322.png
1)紅包的框架 RedPacketFrame部分代碼:
private String ownerName="愛誰誰"; //群主名稱
private OpenMode openWay=null; //紅包的類型,用接口
public RedPacketFrame(String title) //構(gòu)造方法褥蚯,title是界面標題
{
super(title);
init(); //界面相關(guān)初始化的方法
}
public void setMoneyList(ArrayList<Integer> moneyList)
{
this.moneyList = moneyList;
}
public void setOwnerName(String ownerName)
{
this.ownerName = ownerName;
}
public void setOpenWay(OpenMode openWay)
{
this.openWay = openWay;
}
2)Myred代碼:
package day12.redbag;
import day12.redbag.utils.RedPacketFrame;
public class MyRed extends RedPacketFrame
{
public MyRed(String title)
{
super(title);
}
}
3)OpenMode接口代碼:
package day12.redbag.utils;
import java.util.ArrayList;
public interface OpenMode
{
ArrayList<Integer> divide(int totalMoney, int totalCount);
}
4)Bootstrap代碼:
package day12.redbag;
//紅包界面啟動程序
//普通紅包之前介紹過
public class Bootstrap
{
public static void main(String[] args)
{
//設(shè)置標題
MyRed myRed=new MyRed("搶紅包");
//設(shè)置群主名
myRed.setOwnerName("馬云");
//設(shè)置分發(fā)策略
//設(shè)置普通紅包
// NormalMode normalMode = new NormalMode();
// myRed.setOpenWay(normalMode);
//設(shè)置隨機紅包
RandomMode randomMode = new RandomMode();
myRed.setOpenWay(randomMode);
}
}
5)普通紅包代碼:
package day12.redbag;
import day12.redbag.utils.OpenMode;
import java.util.ArrayList;
public class NormalMode implements OpenMode
{
@Override
public ArrayList<Integer> divide(final int totalMoney, final int totalCount)
{
ArrayList<Integer> list = new ArrayList<>();
int avg=totalMoney/totalCount;
int mod=totalMoney%totalCount;
for (int i = 0; i <totalCount-1 ; i++) {
list.add(avg);
}
list.add(avg+mod);
return list;
}
}
6)手氣紅包代碼:
package day12.redbag;
import day12.redbag.utils.OpenMode;
import java.util.ArrayList;
import java.util.Random;
public class RandomMode implements OpenMode
{
@Override
public ArrayList<Integer> divide( int totalMoney, int totalCount)
{
/*
*隨機分配挚冤,totalMoney 單位是:分
*最少一分錢澜薄,最多不超過剩下金額平均數(shù)的2倍,應(yīng)該越發(fā)越少
*隨機金額公式:1+random.nextInt(最多不超過剩下金額平均數(shù)的2倍)
* 隨機金額公式:1+random.nextInt(leftMoney/leftCount*2)
*/
ArrayList<Integer> list = new ArrayList<>();
Random random = new Random();
//分別代表剩下多少錢和剩下多少分
int leftMoney=totalMoney;
int leftCount=totalCount;
//隨機發(fā)錢n-1個棋枕,最后一個不需要隨機
for (int i = 0; i <totalCount-1 ; i++) {
//隨機出來的金額
int money=1+random.nextInt(leftMoney/leftCount*2);
//將隨機出來的金額放入集合
list.add(money);
//應(yīng)該越發(fā)越少
leftCount--;//剩下的分數(shù)每次減一
leftMoney-=money;
}
//處理最后一個
list.add(leftMoney);
return list;
}
}
紅包界面
批注 2020-07-27 193749.png
普通紅包
批注 2020-07-27 193815.png
批注 2020-07-27 193828.png
批注 2020-07-27 193840.png
手氣紅包
批注 2020-07-27 201302.png