喜欢玩彩票的朋友们应该很多人都了解过双色球,也都希望通过500万的大奖改变自己的人生,今天我们就来利用java中的数组实现一个双色球的案例。
双色球彩票的规则是这样的,中奖号码是5个红球和1个蓝球,红球从33个里边随机选出5个,蓝球从16个里边选出一个。
好的,知道了他的规则之后我们就要开始分析,这里边红球的号码从1-33,所以我们要构建一个1-33的红球数组,并从中随机选取5个,所以又需要用到随机数,在选的时候还有一点需要注意,就是选中的红球是不能重复的,比如说第一次选中了3号求,那么剩下的几次选红球,就不可以在选3号球了,所以这里是一个难点,那么我们该怎么实现呢,就是在创建了33个红球的数组的同时,在创建一个和他长度相同的标记数组,里边的元素是布尔类型,如果一个球被选中,就把标志更改一下,下次在选球的时候,先看标记,如果标记是被选中的则继续选。这里边还要用到一个知识点就是随机数。这里我们使用Random这个类,通过里边的nextInt来获取随机数,next(20) 这个方法得到的就是从0到20之间的一个随机数,注意包括0,不包括20,所以当我们选择篮球的时候,是从1-16里边选择一个随机数,那么我们实际上可以使用nextInt(16)+1的方式来实现。好了,我们整理一个步骤。
1. 构建一个int类型的红球数组,长度33,里边的元素,1--33
2. 构建一个boolean类型的红球标志数组,长度33,里边的元素都是false
3. 构建一个int类型的数组,长度是6,用来存放被选中红球
4. 生成随机索引,相当于从数组中选球,每次选中一个球,先判断一个对应的标志数组,如果对应的是false,则说明该球可以使用,把他放到选中的数组中,同时把标记改为true,知道选中数组中的6个球都选完
5. 生成蓝球的号码,就是得到一个1-16中的随机数
6. 对红球数组做排序并打印最终结果。
好了,直接看代码
public class DoubleColorsBallDemo {
public static void main(String[] args) {
generateNum();//调用生成双色球号码的方法
}
public static void generateNum(){
int[] redBallPool = new int[33];//1.构建33个红球的数组
boolean[] redBallFlag = new boolean[33];//2.构建红球标志数组
Random rm = new Random();
for(int i=0;i<33;i++){
redBallPool[i] = i+1;//给红球数组中放球,球从1号到33号
}
int[] choosenRedBall = new int[6];//3.构建红球的中奖号码数组
int length = 0;//设置一个变量,来标记有几个红球被选中,每次找到一个符合的就加1
while(length != 6){//开始选球
int index = rm.nextInt(33);
if(!redBallFlag[index]){//先判断球是否可用,即之前有没有被选中过
redBallFlag[index] = true;//如果可用,先把他标记改一下,代表已经被选中过,不能再被选了
choosenRedBall[length] = redBallPool[index];//存放到选中的数组中
length++;//标记加1
}
}
int blueBall = rm.nextInt(16)+1;//生成蓝球
//排序,使用Arrays.sort();
Arrays.sort(choosenRedBall);//对红球排序
System.out.println("红球:"+Arrays.toString(choosenRedBall)+",蓝球"+blueBall);
}
关于双色球的案例我们就介绍到这里,如果大家学了set其实实现起来会更简单,因为set本身就是一个不允许元素重复的集合。