A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.heima.test8;

  2. public class LuckyMoney {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 Money m = new Money(20, 5);
  8.                 new Money("张三").start();
  9.                 new Money("李四").start();
  10.                 new Money("王五").start();
  11.                 new Money("赵六").start();
  12.                 new Money("孙七").start();
  13.                 new Money("楼主").start();
  14.                 new Money("二楼").start();

  15.         }
  16. }

  17. class Money extends Thread {

  18.         private static int totalAmount; // 红包总金额
  19.         private static int num; // 红包个数

  20.         public Money(String name) {
  21.                 super(name);
  22.         }
  23.         // 构造方法
  24.         public Money(int totalAmount, int num) {
  25.                 this.totalAmount = totalAmount;
  26.                 this.num = num;
  27.         }

  28.         public void run() {
  29.                 synchronized (Money.class) {
  30.                         try {
  31.                                 Thread.sleep(100);
  32.                         } catch (InterruptedException e) {

  33.                                 e.printStackTrace();
  34.                         }
  35.                         int maxMoney = totalAmount - num - 1; // 设置最大开枪红包金额
  36.                         if (num == 1) { // 如果只剩一个红包,输出剩余的红包金额
  37.                                 System.out.println(getName() + "抢到了" + totalAmount + "元");
  38.                                 totalAmount = 0;
  39.                                 num = -1;
  40.                         } else if (num == -1) { // 如果红包都被领完,提示抢光了
  41.                                 System.out.println(getName() + "你来晚啦,红包被抢完了");
  42.                         } else { // 如果有红包,则随机抢到红包金额
  43.                                 int getMoney;
  44.                                 getMoney = (int) (Math.random() * maxMoney) + 1;
  45.                                 System.out.println(getName() + "抢到了" + getMoney + "元");
  46.                                 totalAmount -= getMoney; // 抢完红包金额减少
  47.                                 num--; // 抢完红包数减少
  48.                         }
  49.                 }
  50.         }
  51. }
复制代码

测试了几次,好像先强优势比较大,大神帮我分析一下,怎么改进

3 个回复

正序浏览

是用的随机数,终于搞明白了,主要是前面先抢的随机的范围最大,所以最有优势,网上看的微信红包的随机范围是在0.02-(剩余平均金额) * 2 之间  这样就公平了,不过这样幸运王在后面的几率大点
回复 使用道具 举报
试试随机数...
回复 使用道具 举报
刚开始java面向对象学习,看到代码只能膜拜了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马