最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)微信發(fā)紅包

 更新時間:2019年12月11日 08:23:46   作者:羅俊-Everns  
這篇文章主要為大家詳細介紹了Java實現(xiàn)微信發(fā)紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

        紅包文化源遠流長。從古時的紅色紙包,到手機App中的手氣紅包,紅包作為一種獨特的中華文化傳承至今。之前的所有內(nèi)容中,綜合Java這方面的知識,可以模擬發(fā)普通紅包。那么這篇博客,我將整合之前介紹的所有的技術和知識,編寫一個帶界面版的 發(fā)紅包 案例。

需求分析

        分析并使用已給出的類,編寫程序,設置紅包類型。

小貼士 紅包類型:

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

案例實現(xiàn)

環(huán)境搭建:

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

1. RedPacketFrame :(界面)

一個抽象類,包含了一些屬性,是紅包案例的頁面。

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

2. OpenMode :(類型)

一個接口,包含一個分配方法,用來指定紅包類型。

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

3. 定義 RedPacket:

RedPacket 類,繼承 RedPacketFrame :

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

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

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

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

點擊 塞錢進紅包 按鈕,跳轉到下一頁面。

5. RedPacket 對象

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

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

6. RedPacket 對象

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

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

普通紅包

打開方式 Common。

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

發(fā)普通紅包

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

拼手氣紅包

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

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

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

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

Lucky:

手氣紅包,打開方式 Lucky ,代碼如下:

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

發(fā)紅包

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

總結

通過 發(fā)紅包 案例,我將之前所學過的各種類和方法總結起來,如下:

1. 基礎語法。
2. 一些基本的類的方法。
3. 案例體現(xiàn)了面向對象之繼承。
4. 接口作為參數(shù)的使用。
5. 簡化接口的使用方式。

相信每位讀者,都會有自己的思考和答案。也相信各位讀者,隨著開發(fā)經(jīng)驗的豐富,對于技術的理解會更加深入,對技術的運用會更加純熟。通過對大量案例的不斷積累,最終寫出屬于你自己的程序,成為一名真正的coder。感謝大家的閱讀,技術的道路上,這只是一個開始!謝謝大家!

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • MyBatis?insert實體如何返回主鍵

    MyBatis?insert實體如何返回主鍵

    這篇文章主要介紹了MyBatis?insert實體如何返回主鍵,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JAVA時間日期處理類實例

    JAVA時間日期處理類實例

    這篇文章主要介紹了JAVA時間日期處理類,可實現(xiàn)遍歷兩個日期之間的每一天的功能,涉及針對日期的常見操作技巧,需要的朋友可以參考下
    2015-04-04
  • Java實現(xiàn)將txt/word/pdf轉成圖片并在線預覽的功能

    Java實現(xiàn)將txt/word/pdf轉成圖片并在線預覽的功能

    本文將基于aspose-words(用于txt、word轉圖片),pdfbox(用于pdf轉圖片),封裝成一個工具類來實現(xiàn)txt、word、pdf等文件轉圖片的需求并實現(xiàn)在線預覽功能,需要的可以參考一下
    2023-05-05
  • Javafx利用fxml變換場景的實現(xiàn)示例

    Javafx利用fxml變換場景的實現(xiàn)示例

    本文主要介紹了Javafx利用fxml變換場景的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • Java利用WatchService監(jiān)聽文件變化示例

    Java利用WatchService監(jiān)聽文件變化示例

    本篇文章主要介紹了Java利用WatchService監(jiān)聽文件變化示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • JVM常見垃圾收集器學習指南

    JVM常見垃圾收集器學習指南

    這篇文章主要為大家介紹了JVM常見垃圾收集器學習指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • JAVA Stack詳細介紹和示例學習

    JAVA Stack詳細介紹和示例學習

    JAVA Stack是棧。它的特性是:先進后出(FILO, First In Last Out)。
    2013-11-11
  • java中文轉拼音工具類詳解

    java中文轉拼音工具類詳解

    這篇文章主要為大家詳細介紹了java中文轉拼音工具類的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Spring中DeferredResult異步處理

    Spring中DeferredResult異步處理

    DeferredResult是Spring中處理異步請求的強大工具,可以幫助改善應用程序的性能和用戶體驗,本文就來介紹一下Spring中DeferredResult異步處理,感興趣的可以了解一下
    2023-12-12
  • 超細講解Java調用python文件的幾種方式

    超細講解Java調用python文件的幾種方式

    有時候我們在寫java的時候需要調用python文件,下面這篇文章主要給大家介紹了關于Java調用python文件的幾種方式,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12

最新評論

普洱| 峨边| 新营市| 金平| 济南市| 陵水| 区。| 昌都县| 新疆| 读书| 延庆县| 德惠市| 裕民县| 象州县| 黄浦区| 紫阳县| 大足县| 吉林市| 惠来县| 商都县| 西昌市| 延寿县| 华宁县| 湄潭县| 安平县| 谢通门县| 衡山县| 平遥县| 大关县| 无锡市| 定安县| 霍州市| 清丰县| 伊宁市| 绩溪县| 宣威市| 屏东县| 启东市| 桂东县| 资阳市| 普陀区|