微信手气红包核心代码

package redpackage;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

public class GetRed {
    public static void main(String[] args) {
        getRed(6, 1000000);
    }
    public static List getRed(int number,float total){

        System.out.println("****随机红包测试****");
        float money;  
        float all=total;
        double min = 0.5;  
        double max;    
        int i = 1;    
        List math = new ArrayList();    
        DecimalFormat df = new DecimalFormat("###.##");    

        if (i == number) {        
            math.add(total);        
            System.out.println("第" + i + "个红包"+total );     
        }   else{
            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 );     
                }   


            }

        }  

        //取数组中最大的一个值的索引    
        System.out.println("本轮发红包中共"+number+"人"+"总金额为:"+all);
        System.out.println("本轮发红包中第" + (math.indexOf(Collections.max(math)) + 1) + "个人手气最佳"+Collections.max(math));
        System.out.println("本轮发红包中第" + (math.indexOf(Collections.min(math)) + 1) + "个人手气最差"+Collections.min(math));
        return math; 
    }

}
View Code

 

转载于:https://www.cnblogs.com/Rick001/p/6385544.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值