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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java微信红包_Java模拟微信发红包(普通红包、拼手气红包)

發布時間:2023/12/20 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java微信红包_Java模拟微信发红包(普通红包、拼手气红包) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設紅包總額M元,分給N個人。

滿足條件:

如果是普通紅包,每個人獲得的金額都一樣;

如果是拼手氣紅包,則有所區別,但不能金額過于離譜,比如第一個獲得的太多,以至于后來的人都幾乎沒得分。

注意點:

1.總額必須準確

2.最小金額為0.01元,即1分;

3.獲得紅包金額的概率須加以控制。

一、普通紅包

核心代碼:

public ArrayList divide(int totalMoney, int count) {

// 創建保存各個紅包金額的集合

ArrayList 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;

}

二、拼手氣紅包

本質上,手氣紅包就是把總金額 totalMoney 隨機分成指定的 count 份,所以必須規定每一份金額的取值范圍。如果范圍太小,可能導致后分配紅包金額特別大。反之范圍太大,可能導致后分配紅包金額為0,不夠分。可見,取值范圍的定義規則,是手氣紅包的關鍵所在。

我們規定:每一份隨機金額范圍(除最后一份),最小值為1,最大值為當前剩余平均金額的2倍 ,單位為"分"。

計算公式:

當前剩余平均金額=剩余總金額/剩余紅包個數——程序中,建議換算為"分"進行運算。

核心代碼:

public ArrayList divide(int totalMoney, int count) {

// 創建保存各個紅包金額的集合

ArrayList list = new ArrayList<>();

// 定義循環次數,總個數‐1次

int time = count ‐ 1;//注意此處為何減一

// 創建隨機數對象

Random random = new Random();

//總金額轉換成分

moneyfen=totalMoney*100;

// 循環分配

for (int i = 0; i < time; i++) {

/*

* 每次重新計算,生成隨機金額

* 隨機范圍: totalMoney / count * 2,totalMoney不斷的減少,

* count也不斷的減少,所以這是一個可變化的范圍.

*/

int moneyget = random.nextInt(moneyfen / count * 2) + 1;

// 金額添加到集合

list.add(money/100);//加減乘除計算,會先統一操作數的精度,其規則是先統一成精度高的數。

//如上,double型/int型、int型/double型,最后都轉成double型/double型。

// 總金額扣除已分配金額

monfen ‐= moneyget;

// 紅包個數‐1

count‐‐;

}

// 剩余的金額,為最后一個紅包

list.add(moneyfen/100);

return list;

}

備注:

代碼中用到java.util.Random類。下面Random()的兩種構造方法:

Random():創建一個新的隨機數生成器。

Random(long seed):使用單個 long 種子創建一個新的隨機數生成器。

如下面的Java代碼:

Random rand =new Random(25);

int i;

i=rand.nextInt(100);

初始化時25并沒有起直接作用(注意:不是沒有起作用),rand.nextInt(100);中的100是隨機數的上限,產生的隨機數為0-100的整數,不包括100。

下面是Java.util.Random()方法摘要:

protected int next(int bits):生成下一個偽隨機數。

boolean nextBoolean():返回下一個偽隨機數,它是取自此隨機數生成器序列的均勻分布的boolean值。

void nextBytes(byte[] bytes):生成隨機字節并將其置于用戶提供的 byte 數組中。

double nextDouble():返回下一個偽隨機數,它是取自此隨機數生成器序列的、在0.0和1.0之間均勻分布的 double值。

float nextFloat():返回下一個偽隨機數,它是取自此隨機數生成器序列的、在0.0和1.0之間均勻分布float值。

double nextGaussian():返回下一個偽隨機數,它是取自此隨機數生成器序列的、呈高斯(“正態”)分布的double值,其平均值是0.0標準差是1.0。

int nextInt():返回下一個偽隨機數,它是此隨機數生成器的序列中均勻分布的 int 值。

int nextInt(int n):返回一個偽隨機數,它是取自此隨機數生成器序列的、在(包括和指定值(不包括)之間均勻分布的int值。

long nextLong():返回下一個偽隨機數,它是取自此隨機數生成器序列的均勻分布的 long 值。

void setSeed(long seed):使用單個 long 種子設置此隨機數生成器的種子。

下面給幾個例子:

生成[0,1.0)區間的小數:double d1 = r.nextDouble();

生成[0,5.0)區間的小數:double d2 = r.nextDouble() * 5;

生成[1,2.5)區間的小數:double d3 = r.nextDouble() * 1.5 + 1;

生成-231到231-1之間的整數:int n = r.nextInt();

生成[0,10)區間的整數:

int n2 = r.nextInt(10);//方法一

n2 = Math.abs(r.nextInt() % 10);//方法二

參考資料:

http://blog.sina.com.cn/s/blog_93dc666c0101h3gd.html

https://www.jb51.net/article/176121.htm

http://blog.csdn.net/wpjava/article/details/6004492

https://www.cnblogs.com/ningvsban/p/3590722.html

總結

以上是生活随笔為你收集整理的java微信红包_Java模拟微信发红包(普通红包、拼手气红包)的全部內容,希望文章能夠幫你解決所遇到的問題。

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