java代码实现随机中奖 的代码
来源:互联网 发布:操盘手手机炒股软件 编辑:程序博客网 时间:2024/05/17 10:41
package com.zhongjiang;
import java.util.LinkedList;
import java.util.List;
public class GetGift {
// 奖品仓库
private List<Gift> gifts = new LinkedList<Gift>();
public GetGift() {
// 生成一堆奖品放进奖品仓库
// 一等奖,一个 ,优先级1,|二等奖,两个优先级,2|。。。20等奖,20个,优先级20
for (int i = 1; i <= 20; i++) {
GiftType gt = new GiftType(i + "等奖", i, i);
for (int j = 1; j <= i; j++) {
gifts.add(new Gift(i + "等奖——第" + j + "号", gt));
}
}
}
// 抽奖
public synchronized Gift getGift() {
int randomNumber = (int)(Math.random() * total());
int priority = 0;
for (Gift g : gifts) {
priority += g.getType().getPriority();
if (priority >= randomNumber) {
// 从奖品库移出奖品
gifts.remove(g);
return g;
}
}
// 抽奖次数多于奖品时,没有奖品
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
GetGift gg = new GetGift();
// 一共生成210个奖品,抽210次,多抽显示null
for (int i = 0; i < 210; i++) {
System.out.println(gg.getGift());
}
}
// 计算总优先级,内部使用
private int total() {
int result = 0;
for (Gift g : gifts) {
result += g.getType().getPriority();
}
return result;
}
}
// 记录奖品的信息
// 如1等奖共1个,优先级为1最难抽
class GiftType {
// 名字(如1等奖)
private String name;
// 这种奖品的数量,数量越大越容易抽到
private int quantity;
// 这种奖品的优先级,最小为1,数越大越容易抽到
private int priority;
public GiftType(String name, int quantity, int priority) {
this.name = name;
this.quantity = quantity;
this.priority = priority;
}
public int getPriority() {
return priority;
}
@Override
public String toString() {
return "GiftType [name=" + name + ", quantity=" + quantity + ", priority=" + priority + "]";
}
}
// 奖品
class Gift {
// 每个奖品有唯一id,抽奖不会重复,格式为"16等奖——第8号"
private String id;
// 这个奖品的类别
private GiftType type;
public Gift(String id, GiftType type) {
this.id = id;
this.type = type;
}
public GiftType getType() {
return type;
}
@Override
public String toString() {
return "Gift [id=" + id + ", type=" + type + "]";
}
}
import java.util.LinkedList;
import java.util.List;
public class GetGift {
// 奖品仓库
private List<Gift> gifts = new LinkedList<Gift>();
public GetGift() {
// 生成一堆奖品放进奖品仓库
// 一等奖,一个 ,优先级1,|二等奖,两个优先级,2|。。。20等奖,20个,优先级20
for (int i = 1; i <= 20; i++) {
GiftType gt = new GiftType(i + "等奖", i, i);
for (int j = 1; j <= i; j++) {
gifts.add(new Gift(i + "等奖——第" + j + "号", gt));
}
}
}
// 抽奖
public synchronized Gift getGift() {
int randomNumber = (int)(Math.random() * total());
int priority = 0;
for (Gift g : gifts) {
priority += g.getType().getPriority();
if (priority >= randomNumber) {
// 从奖品库移出奖品
gifts.remove(g);
return g;
}
}
// 抽奖次数多于奖品时,没有奖品
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
GetGift gg = new GetGift();
// 一共生成210个奖品,抽210次,多抽显示null
for (int i = 0; i < 210; i++) {
System.out.println(gg.getGift());
}
}
// 计算总优先级,内部使用
private int total() {
int result = 0;
for (Gift g : gifts) {
result += g.getType().getPriority();
}
return result;
}
}
// 记录奖品的信息
// 如1等奖共1个,优先级为1最难抽
class GiftType {
// 名字(如1等奖)
private String name;
// 这种奖品的数量,数量越大越容易抽到
private int quantity;
// 这种奖品的优先级,最小为1,数越大越容易抽到
private int priority;
public GiftType(String name, int quantity, int priority) {
this.name = name;
this.quantity = quantity;
this.priority = priority;
}
public int getPriority() {
return priority;
}
@Override
public String toString() {
return "GiftType [name=" + name + ", quantity=" + quantity + ", priority=" + priority + "]";
}
}
// 奖品
class Gift {
// 每个奖品有唯一id,抽奖不会重复,格式为"16等奖——第8号"
private String id;
// 这个奖品的类别
private GiftType type;
public Gift(String id, GiftType type) {
this.id = id;
this.type = type;
}
public GiftType getType() {
return type;
}
@Override
public String toString() {
return "Gift [id=" + id + ", type=" + type + "]";
}
}
0 0
- java代码实现随机中奖 的代码
- PHP做一个中奖概率的代码
- java代码实现年会座位的随机分配
- Java代码实现随机生成汉字
- jquery随机展示头像的实现代码
- 生成随机密码的C代码实现
- 生成随机密码的C代码实现
- 随机快速排序的代码实现
- Java生成随机字符串的代码
- 随机快速排序的java代码
- Java生成随机字符串的代码
- 随机生成手机号的java代码
- php实现随机中奖(转盘抽奖)
- java根据概率随机中奖 测试类
- Java SSH Hibernate通过代码实现从数据库中随机取出指定条数的随机数据
- 随机时间(java代码)
- java 随机生成身份证代码
- JAVA随机生成字符串代码
- 使用Maven运行Java main的3种方式
- iOS 图片浏览器程序总结
- truncate和delete之间的区别
- 测试博客收藏
- 请不要使用File#deleteOnExit()
- java代码实现随机中奖 的代码
- vijos 1115 火星人
- Scrapy:登陆+rules简要分析
- 前台利用jcrop做头像选择预览,后台通过django利用Uploadify组件上传图最终使用PIL做图像裁切
- apt-get使用总结
- android activities 切换出现白屏
- Lua语言迭代器示例1
- windows下面磁盘管理有,但是资源管理器没有移动硬盘解决办法
- 【OGG】OGG的单向复制配置-支持DDL(二)