赞
踩
一个人在群里发了1个100元的红包,被分成了8个,群里有10个人一起来抢红包,有抢到的金额随机分配。
红包功能需要满足哪些具体规则呢?
1、被分的人数抢到的金额之和要等于红包金额,不能多也不能少。
2、每个人至少抢到1元。
3、要保证红包拆分的金额尽可能分布均衡,不要出现两极分化太严重的情况。
使用线程的同步,红包100元就是资源共享!!
- public class TestRedPacket {
- public static void main(String[] args) {
- //用户名
- List<String> list = Arrays.asList("张三", "刘芳", "李飞", "王芳", "陈风", "方涛", "房名", "王霞", "安利", "田园");
-
- //5个线程
- for (int i = 0; i < 10; i++) {
- MyThread1 my = new MyThread1(list.get(i));
- //启动
- my.start();
- }
- }
- }
-
- class MyThread1 extends Thread {
- private static int money = 100; //总金额
- private static int count = 8; //个数
-
- public MyThread1(String name) {
- super(name);
- }
-
- @Override
- public void run() {
- //同步
- synchronized (MyThread1.class) {
- int prize = 0;
- if (count == 0) {
- System.out.println(getName() + "- 没抢到!");
- } else { //最后一个
- if (count == 1) {
- prize = money;
- } else { //随机
- Random r = new Random();
- //随机范围:[1,m/n×2-1]
- //二倍均值法
- int bounds = (money / count) * 2 - 1;
- prize = r.nextInt(bounds) + 1;
- }
- money -= prize;
- count--;
- System.out.println(getName() + "- 抢到【" + prize + "】元!");
- }
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。