本文已参与「新人创作礼」活动,一起开启掘金创作之路。
需求说明
有没有买过彩票?双色球玩法:开奖情况是33个红球(数字从1-33)出6个(不重复),16个蓝球(数字1-16)随机出1个。如何用java代码模拟一下这个出球过程呢?
实现思路
第一种:java代码
数组随机取数并删除循环5次
第二种:redis的set结构
利用redis的数据结构和现有的操作命令完成
当然还有无数种其他的方式
具体实现
方式一:Java数组
step1: 构建红球数组
/**
* @Description TODO 构建红色球
* @Param []
* @return java.util.ArrayList<java.lang.Integer>
*/
private static ArrayList<Integer> buildRedArray(){
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= 33; i++) {
list.add(i);
}
return list;
}
step2: 构建蓝球数组
/**
* @Description TODO 构建蓝色球
* @Param []
* @return java.util.ArrayList<java.lang.Integer>
*/
private static ArrayList<Integer> buildBlueArray(){
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= 16; i++) {
list.add(i);
}
return list;
}
step3:出球方法
/**
* @Description TODO 取哪个下标(出球方法)
* @Param [java.util.ArrayList<java.lang.Integer>] 一个数组
* @return int 下标
*/
private static int popBall(ArrayList<Integer> list){
Random random = new Random();
int index= random.nextInt(list.size()) ;
return index;
}
step4:已出的球构建成一个集合
/**
* @Description TODO 构建集合收集一下出来的球,再打印出来方便查看
*/
private static void result(){
//构建红球数组
ArrayList<Integer> newRedList = buildRedArray();
//构建红球已出球空集合
ArrayList<Integer> winningNumbersList = new ArrayList<>();
//每出一个球集合里就把这个球剔除掉,集合剩下的元素继续随机出
for (int i = 0; i < 6; i++) {
int winningBallIndex = popBall(newRedList);
winningNumbersList.add(newRedList.get(winningBallIndex));
newRedList.remove(winningBallIndex);
}
//对结果集进行排序
Collections.sort(winningNumbersList);
System.out.println("红色中奖号码="+winningNumbersList);
//蓝色球只需一次
ArrayList<Integer> newBlueList = buildBlueArray();
Integer integer = newBlueList.get(popBall(newBlueList));
System.out.println("蓝色中奖号码="+integer);
}
step5:调用方法执行
/**
* @Description TODO 执行一下!随机五组,凑十块钱的!
*/
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("第"+(i+1)+"组");
result();
System.out.println("-------------------------");
}
}
方式二:Redis的set结构模拟
step1:构建红球
sadd red 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
step2:随机出6红球
srandmember red 6
step3:同样办法再出1个蓝球
sadd blue 1 2 3 4 5 6
srandmember blue 1
当然redis抽奖模型都是类似这种方式实现