微信隨機生成紅包金額算法java版。本站提示廣大學習愛好者:(微信隨機生成紅包金額算法java版)文章只能為提供參考,不一定能成為您想要的結果。以下是微信隨機生成紅包金額算法java版正文
比來幾年玩得最猖狂的應當是發紅包了,特別是過年的時刻特殊受迎接,上面寫了紅包的隨機算法,其實挺簡略的,僅是供給一種思緒,願望可以給年夜家一些啟示。
public class WxAlgorithm{ /** * @param moneySum 輸出總金額 * @param redNum 輸出紅包數目 */ private static void wxAlgorithm(double moneySum, int redNum) { // 設置最小的金額 double moneyMin = 0.01; Random random = new Random(); //准確小數點2位 NumberFormat formatter = new DecimalFormat("#.##"); for (int i=1;i<redNum;i++) { //隨機一個數,數值規模在最小值與余額之間 String money = formatter.format(random.nextDouble() * (moneySum - moneyMin) + moneyMin); //數值轉換 moneySum = Double.valueOf(formatter.format(moneySum - Double.valueOf(money))); System.out.println("第"+i+"個紅包:" + money + "元 ,余額:" + moneySum); } System.out.println("最初個紅包:" + moneySum + "元 ,余額:" + (moneySum - moneySum)); } public static void main(String[] args) { wxAlgorithm(10.26, 9); } }
後來又在網上匯集了一些微信隨機生成紅包算法,供年夜家參考。
public static double [] getMoney(double money, int num){ Random r = new Random(); DecimalFormat format = new DecimalFormat(".##"); double middle = Double.parseDouble(format.format(money/num)); double [] dou = new double[num]; double redMoney = 0; double nextMoney = money; double sum = 0; int index = 0; for(int i=num;i>0;i--){ if(i == 1){ dou[index] = nextMoney; }else{ while(true){ String str = format.format(r.nextDouble()*nextMoney); redMoney = Double.parseDouble(str); if(redMoney>0 && redMoney < middle){ break; } } nextMoney = Double.parseDouble(format.format(nextMoney - redMoney)); sum = sum + redMoney; dou[index] = redMoney; middle = Double.parseDouble(format.format(nextMoney/(i-1))); index++; } } return dou; }
這裡一個根本思緒是如許的:起首算出紅包的均勻值,再經由過程一個隨機紅包數小於這個均勻值的紅包,當該紅包發完後,紅包總金額須要響應削減,同時從新盤算這個均勻值:新的總金額%(原總紅包數-1),直到最初一個紅包時,把一切的殘剩金額塞出來。
還有很多出色源碼分享:java簡略的搶紅包的隨機分派紅包算法完成源碼。
package com.sunron.test; import java.math.BigDecimal; import org.junit.Test; public class HongBao { @Test public void testHonbao(){ hb(100, 9, 0.01);//金額,個數,起碼值 //zb(); } void hb(double total,int num,double min){ for(int i=1;i<num;i++){ double safe_total=(total-(num-i)*min)/(num-i); double money=Math.random()*(safe_total-min)+min; BigDecimal money_bd=new BigDecimal(money); money=money_bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); total=total-money; BigDecimal total_bd=new BigDecimal(total); total=total_bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println("第"+i+"個紅包:"+money+",余額為:"+total+"元"); } System.out.println("第"+num+"個紅包:"+total+",余額為:0元"); } void zb(){ for(int a=0;a<=10000;a++){ if(a % 1000== 0) System.out.println (a); } } }
他人在搶紅包,我們就來研討研討隨機發紅包的算法:
public static void main(String[] args) { //紅包數 int number = 10; //紅包總額 float total = 100; float money; //最小紅包 double min = 1; double max; int i = 1; List math = new ArrayList(); DecimalFormat df = new DecimalFormat("###.##"); while (i < number) { //包管即便一個紅包是最年夜的了,前面剩下的紅包,每一個紅包也不會小於最小值 max = total - min * (number - i); int k = (int)(number - i) / 2; //包管最初兩小我拿的紅包不超越殘剩紅包 if (number - i <= 2) { k = number - i; } //最年夜的紅包限制的均勻線高低 max = max / k; //包管每一個紅包年夜於最小值,又不會年夜於最年夜值 money = (int) (min * 100 + Math.random() * (max * 100 - min * 100 + 1)); money = (float)money / 100; //保存兩位小數 money = Float.parseFloat(df.format(money)); total=(int)(total*100 - money*100); total = total/100; math.add(money); System.out.println("第" + i + "小我拿到" + money + "剩下" + total); i++; //最初一小我拿走剩下的紅包 if (i == number) { math.add(total); System.out.println("第" + i + "小我拿到" + total + "剩下0"); } } //取數組中最年夜的一個值的索引 System.out.println("本輪發紅包中第" + (math.indexOf(Collections.max(math)) + 1) + "小我手氣最好"); }
以上就是為年夜家分享的多種微信隨機生成紅包算法,為年夜家供給了多種思緒,願望對年夜家進修應用微信隨機生成紅包算法有所贊助,也願望年夜家持續存眷的更多出色內容。