JAVA代码实现抽奖功能,自定义奖品以及奖品概率

大家好,我是梦辛工作室的灵,最近做了一个抽奖功能,然后自己为了以后方便和拓展 就封装了一下,可以自定义奖品 自定义权重 和 价格等信息,还可以自由设置是否每抽到一次 减少一个奖品,下面先来看下实现效果

package com.mx.getaward;public class Main {public static void main(String[] args) {AwardGroup awardGroup = new AwardGroup();awardGroup.setAutoReduce(true); // 是否每抽一次减少一个奖品awardGroup.addAward(new Award("奖品1", 1, 10)); // Award 分别是 奖品名称 奖品权重(个数) 奖品价格awardGroup.addAward(new Award("奖品2", 2, 10));awardGroup.addAward(new Award("奖品3", 1, 10));awardGroup.addAward(new Award("奖品4", 3, 10));for (int i = 0; i < 7; i++) {System.out.println(awardGroup.startGetAward());}}
}


下面是Award 类,里面就放了一些 奖品信息:

package com.mx.getaward;public class Award {public Award() {}public Award(String name, int weight, int money) {this.name = name;this.weight = weight;this.money = money;}private String name; // 奖品名称private int weight; // 奖品权重private int money; // 奖品价值public String getName() {return name;}public void setName(String name) {this.name = name;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}public void reduceWeight(int reduce) {if (weight - reduce < 0) {weight = 0;} else {weight -= reduce;}}@Overridepublic String toString() {return "恭喜您获得奖品 " + name + " 价值 " + money + "元";}}

然后就是 奖品组类 AwardGroup

package com.mx.getaward;import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class AwardGroup {private List<Award> awardgroup;private boolean isAutoReduce; // 是否自动减少数量private int total = 0; // 总权数public AwardGroup() {awardgroup = new ArrayList<Award>();}public boolean addAward(Award award) {total += award.getWeight();return awardgroup.add(award);}public boolean remove(Award award) {total -=  award.getWeight();return awardgroup.remove(award);}public List<Award> getAwardgroup() {return awardgroup;}public void setAwardgroup(List<Award> awardgroup) {this.awardgroup = awardgroup;total = 0;for (Award award : awardgroup) {total += award.getWeight();}}public boolean isAutoReduce() {return isAutoReduce;}public void setAutoReduce(boolean isAutoReduce) {this.isAutoReduce = isAutoReduce;}public synchronized Award startGetAward() {if (awardgroup == null || total <= 0)return null;Random random = new Random();int awardNUmber = random.nextInt(total);for (Award award : awardgroup) {if (awardNUmber + 1 - award.getWeight() > 0) {awardNUmber -= award.getWeight();continue;}if (isAutoReduce) {award.reduceWeight(1);total -= 1;}return award;}return null;}
}

实现原理也很简单,比如现在有 3个奖品 ,权重分别为 10 20 30,那么总数就为 60,然后我们 从0-60抽一个随机数,依次减去每个奖品的现有权重,如果小于或等于0 那么就说明抽中的为该奖品

JAVA代码实现抽奖功能,自定义奖品以及奖品概率相关推荐

  1. java 抽奖 界面显示,Java实现简单抽奖功能界面

    本文实例为大家分享了Java实现简单抽奖功能的具体代码,供大家参考,具体内容如下 要求:定义文本框添加姓名,将姓名存储并且在界面中可见,点击抽奖按钮进行抽奖并输出最后的中奖得主. 关于抽奖当然需要用到 ...

  2. 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据

    大数据 java 代码示例 这是称为" Functional Java by Example"的系列文章的第7部分. 我在本系列的每个部分中开发的示例是某种"提要处理程序 ...

  3. 【iText5 生成PDF】纯Java代码实现生成PDF(自定义表格、文本水印、单元格样式)

    工作中遇到需要生成PDF.最终选择了iText.其他也有通过html再生成.感觉不太适合就用了代码实现. 使用iText 5.5.13.1版本.纯Java代码实现 1.自定义表格合并指定行列完成数据填 ...

  4. java 代码模拟抽奖(练习)

    题目:一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金.请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复.打印效果如下:(随机顺序,不一定是 ...

  5. 【计算机网络 15】简单几行Java代码实现迅雷功能,java流式编程原理

    public static void main(String[] args) throws Exception { //1.创建一个socket连接 Socket socket = new Socke ...

  6. java屏幕快速截图,java代码实现截图功能(屏幕截图)

    代码如下: import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.T ...

  7. Java代码实现点赞功能

    场景 个人搭建的一个美食教程网站,每个美食教程的详细页面有一个点赞按钮,每个用户可以通过点击按钮来点赞与取消点赞,并可以看见当前菜品有多少个赞. 实现思路 因为点赞与取消点赞是一个在页面上用户操作比较 ...

  8. java抽奖_JAVA实现用户抽奖功能(附完整代码)

    需求分析 1)实现三个基本功能:登录.注册.抽奖. 2)登录:用户输入账号密码进行登录,输入账号后会匹配已注册的用户,若输入用户不存在则退出,密码有三次输入机会,登录成功后主界面会显示已登录用户的账号 ...

  9. java登录注册抽奖完整代码_JAVA实现用户抽奖功能(附完整代码)

    需求分析 1)实现三个基本功能:登录.注册.抽奖. 2)登录:用户输入账号密码进行登录,输入账号后会匹配已注册的用户,若输入用户不存在则退出,密码有三次输入机会,登录成功后主界面会显示已登录用户的账号 ...

最新文章

  1. 在linux环境下重启oracle数据库,解决密码过期的问题
  2. android动态创建arraylist,Android:二维ArrayList帮助
  3. IT小小鸟VS.小小小鸟:展翅,我们一起翱翔!
  4. BZOJ 2502: 清理雪道 [最小流]
  5. python方差分析模型的预测结果中endog表示_python时间序列分析
  6. 使用FileSystem类进行文件读写及查看文件信息
  7. 获取一些系统和用户的通用属性
  8. SQL数据库打包发送与接收
  9. 法务管理项目结项了mark一下
  10. 主成分分析和因子分析的理论与速成应用丨R语言和SPSS比较案例
  11. h5前端兼容性问题及解决方法集合
  12. 使用Android Studio和阿里云数据库实现一个远程聊天程序
  13. python闲鱼监控_推荐一个可玩的爬虫开源项目-闲鱼部分我已经测试过
  14. 批处理使用技巧:批量修改文件名
  15. 计算机专业教师资格证教学设计,教师资格证教案
  16. 使用hive报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask解决方法
  17. Linux下的lds连接脚本详解,Linux链接脚本学习--lds
  18. Oracle 快速入门 PL/SQL游标
  19. OVAL学习之第二篇
  20. C++计算a的b次方的算法(附完整源码)

热门文章

  1. 广汽传祺全新旗舰MPV传祺E9将于5月21日上市,预售价格区间33万-39万元
  2. 赋予域内普通用户dcsync权限来变向权限维持
  3. missing separator. Stop
  4. 如何利用手机在网状态API精准发送短信和电话
  5. IT项目管理-项目组合、项目群、项目
  6. 《WINDOWS核心编程》的源程序编译不了是什么问题?
  7. 成员变量、全局变量和局部变量
  8. 天花板漏水是找楼上赔还是找开发商赔
  9. C#_Unit Testing 一(xUnit)
  10. 线程优化-使用线程池ThreadPoolExecutor