国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

如何使用Java實(shí)現微信發(fā)紅包

發(fā)布時(shí)間:2021-09-27 17:50 來(lái)源:億速云 閱讀:0 作者:小新 欄目: 開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)如何使用Java實(shí)現微信發(fā)紅包的內容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

需求分析

分析并使用已給出的類(lèi),編寫(xiě)程序,設置紅包類(lèi)型。

小貼士 紅包類(lèi)型:

1.普通紅包:金額均分。不能整除的,余額添加到最后一份紅包中。2.手氣紅包:金額隨機。各個(gè)紅包金額累和與總金額相等。紅包場(chǎng)景: 此案例是模擬群主給群成員發(fā)紅包,群主自己打開(kāi)最后一個(gè)紅包的場(chǎng)景。

案例實(shí)現

環(huán)境搭建:

1.創(chuàng )建項目:名稱(chēng)自定義,建議為 RedPacketDemo 。2.導入圖片:將 pic 目錄,導入項目中,與 src 目錄平級。3.導入已知類(lèi):在 src 下創(chuàng )建一個(gè)包,名字自定義,存放編輯的類(lèi)。

1. RedPacketFrame :(界面)

一個(gè)抽象類(lèi),包含了一些屬性,是紅包案例的頁(yè)面。

public abstract class RedPacketFrame extends JFrame { /* ownerName : 群主名稱(chēng) */ public String ownerName = "誰(shuí)誰(shuí)誰(shuí)誰(shuí)"; /* openMode : 紅包的類(lèi)型 [普通紅包/手氣紅包] */  public OpenMode openMode = null; /** * 構造方法:生成紅包界面.  * @param title 頁(yè)面的標題.  */  public RedPacketFrame(String title) {  super(title);  init();// 頁(yè)面相關(guān)的初始化操作 } /* set方法 */ public void setOwnerName(String ownerName) {  this.ownerName = ownerName; } public void setOpenMode(OpenMode openMode) {  this.openMode = openMode; }}

2. OpenMode :(類(lèi)型)

一個(gè)接口,包含一個(gè)分配方法,用來(lái)指定紅包類(lèi)型。

public interface OpenMode { /** * @param totalMoney 總金額,單位是"分"??偨痤~為方便計算,已經(jīng)轉換為整數,單位為分。    * @param count 紅包個(gè)數     * @return ArrayList<Integer> 元素為各個(gè)紅包的金額值,所有元素的值累和等于總金額.   *   * 請將totalMoney,分成count分,保存到ArrayList<Integer>中,返回即可.  */  public abstract ArrayList<Integer> pide(int totalMoney, int count);}

3. 定義 RedPacket:

RedPacket 類(lèi),繼承 RedPacketFrame :

public class RedPacket extends RedPacketFrame { public RedPacket(String title) {  super(title); }}

4. 定義測試類(lèi),創(chuàng )建 RedPacket:

public class RedPacketTest { public static void main(String[] args) {  RedPacket rp = new RedPacket("大紅包"); }}

運行代碼,打開(kāi)一個(gè)發(fā)紅包的頁(yè)面??梢暂斎肟偨痤~,紅包個(gè)數,留言信息。

點(diǎn)擊 塞錢(qián)進(jìn)紅包 按鈕,跳轉到下一頁(yè)面。

5. RedPacket 對象

RedPacket對象,設置群主名稱(chēng)。setOwnerName(String ownerName) ,是字符串作為參數。我們只需要傳遞一個(gè)字符串即可。

public class RedPacketTest { public static void main(String[] args) {  // 創(chuàng )建紅包對象  RedPacket rp = new RedPacket("大紅包");  // 設置群主名稱(chēng)  rp.setOwnerName("我是群大大"); }}

6. RedPacket 對象

設置紅包類(lèi)型。setOpenMode(OpenMode openMode) ,是接口作為參數。我們必須定義接口的實(shí)現類(lèi),重寫(xiě)接口中方法,并傳遞實(shí)現類(lèi)對象到 setOpenMode 方法中,方可設置完成。再觀(guān)察接口:

public interface OpenMode {/**  * @param totalMoney 總金額,單位是"分"??偨痤~為方便計算,已經(jīng)轉換為整數,單位為分。    * @param count 紅包個(gè)數     * @return ArrayList<Integer> 元素為各個(gè)紅包的金額值,所有元素的值累和等于總金額.   *   * 請將totalMoney,分成count分,保存到ArrayList<Integer>中,返回即可.  */ public abstract ArrayList<Integer> pide(int totalMoney, int count); }

普通紅包

打開(kāi)方式 Common。

public class Common implements OpenMode { @Override public ArrayList<Integer> pide(int totalMoney, int count) {  // 創(chuàng )建保存各個(gè)紅包金額的集合  ArrayList<Integer> list = new ArrayList<>();  // 計算平均金額  int avgMoney = totalMoney / count;  // 設置前面count‐1個(gè)人都是平均的金額  for (int i = 0; i < count ‐ 1; i++) {   list.add(avgMoney);   // 從總金額中減去已分配的金額,就是最后一個(gè)人剩余的金額   totalMoney ‐= avgMoney;  }  // 將剩余的金額設置給最后一個(gè)人  list.add(totalMoney);  return list; }}

發(fā)普通紅包

public class RedPacketTest { public static void main(String[] args) {  // 創(chuàng )建紅包對象   RedPacket rp = new RedPacket("大紅包");  // 設置群主名稱(chēng)   rp.setOwnerName("我是群大大");  // 設置紅包類(lèi)型   rp.setOpenMode(new Common()); // 普通紅包 }}

拼手氣紅包

本質(zhì)上,手氣紅包就是把總金額 totalMoney 隨機分成指定的 count 份,所以必須規定每一份金額的取值范圍。如果范圍太小,可能導致后分配紅包金額特別大。反之范圍太大,可能導致后分配紅包金額為0,不夠分??梢?jiàn),取值范圍的定義規則,是手氣紅包的關(guān)鍵所在。我們規定:每一份隨機金額范圍(除最后一份),最小值為1,最大值為當前剩余平均金額的2倍 ,單位為"分"。計算公式:

當前剩余平均金額=剩余總金額/剩余紅包個(gè)數

舉例:總額為50元,發(fā)5個(gè)紅包。

小貼士:為方便表格中進(jìn)行運算,此處,單位為"元"。程序中,建議換算為"分"進(jìn)行運算。

Lucky:

手氣紅包,打開(kāi)方式 Lucky ,代碼如下:

public class Lucky implements OpenMode { @Override public ArrayList<Integer> pide(int totalMoney, int count) {  // 創(chuàng )建保存各個(gè)紅包金額的集合  ArrayList<Integer> list = new ArrayList<>();  // 定義循環(huán)次數,總個(gè)數‐1次  int time = count ‐ 1;  // 創(chuàng )建隨機數對象   Random random = new Random();  // 循環(huán)分配  for (int i = 0; i < time; i++) {   /*     * 每次重新計算,生成隨機金額    * 隨機范圍: totalMoney / count * 2,totalMoney不斷的減少,    * count也不斷的減少,所以這是一個(gè)可變化的范圍.    */   int money = random.nextInt(totalMoney / count * 2) + 1;   // 金額添加到集合   list.add(money);   // 總金額扣除已分配金額   totalMoney ‐= money;   // 紅包個(gè)數‐1   count‐‐;  }  // 剩余的金額,為最后一個(gè)紅包  list.add(totalMoney);  return list; }}

發(fā)紅包

public class RedPacketTest {  public static void main(String[] args) {    // 創(chuàng )建紅包對象     RedPacket rp = new RedPacket("大紅包");    // 設置群主名稱(chēng)     rp.setOwnerName("我是群大大");    // 設置紅包類(lèi)型,二選一     // rp.setOpenMode(new Common()); // 普通紅包    rp.setOpenMode(new Lucky()); // 手氣紅包  }}

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

欧美巨鞭大战丰满少妇| 中文字幕乱码久久午夜| 狠狠色丁香久久婷婷综合 | 国产在线一区二区三区AV| 天堂在线www资源在线| 日韩精品无码中文字幕电影|