您的位置:首页 > 移动开发 > 微信开发

JAVA版的微信红包算法

2016-05-03 19:39 429 查看
比如发一个总额为50元的红包,总共分5个:

第一个:在0~10元之间随机产生一个数,作为这一个红包的钱数,设为x1:

第二个:剩下的钱为(50-x1),然后在0~(50-x1)/(5-1)随机一个数,作为这份的钱数,设x2

。。。

第5份:剩下的钱为(50-x1-x2-...x4),系统由0~(50-x1-x2-...-xn-1)/(5-4)随机一个数,作为这个份的钱数,设为xn
首先定义一个红包类:

<span style="font-family:SimSun;font-size:18px;">public class Money {
// remainNum剩余的红包数量
// remainMoney 剩余的钱
public static int remainNum;
public static double remainMoney;
}</span>


写一个调用方法getRandomMoney,返回值类型为double,定义最小值和最大值,当红包数量remainNum为1时,直接返回remainMoney,

<span style="font-family:SimSun;font-size:18px;">public static double getRandomMoney(Money myMoney) {
// remainSize 剩余的红包数量
// remainMoney 剩余的钱
// 随机,额度在0.01和(剩余平均值*2)之间
double min= 0.01;
double max= myMoney.remainMoney / myMoney.remainNum * 2;
if (myMoney.remainNum == 1) {
myMoney.remainNum--;
return (double) Math.round(myMoney.remainMoney * 100) / 100;
}
Random r= new Random();
double money = r.nextDouble() * max;
money = money <= min ? 0.01: money;
money = Math.floor(money * 100) / 100;
myMoney.remainNum--;
myMoney.remainMoney -= money;
return money;
}</span>


测试一下

<span style="font-family:SimSun;font-size:18px;">public static void main(String[] args) {
// TODO Auto-generated method stub
Money m=new Money();
m.remainNum=5;
int count=m.remainNum;
m.remainMoney=50;
for(int i=1;i<=count;i++){
System.out.println("第"+i+"次获取的红包为"+getRandomMoney(m)+"元");
}

}
</span>
结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: