需求: 使用集合实现双色球模拟,并判断是否中奖 双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。 红色球从1—33中随机生成6个不重复的号码;蓝色球号码从1—16中随机生成1个; 客户通过键盘录入购买的红色球6个(不重复)和蓝色球1个, 判断客户的中奖状况: 1) 买中蓝色球, 红色球全部买中, 1等奖 2) 买中蓝色球,红色球买中3-5个, 2等奖 3) 买中蓝色球, 红色球买中1个, 3等奖 4) 其余情况全部算作没有中奖 要求 : 比较买中的红球时, 要求购买顺序也作为比较依据,购买顺序完全一致才算作买中红球个数
看到需求以后,我们首先确定使用哪种集合存放哪种球,需求里提到了红球需要时六个不重复的数字,注意这个 “不重复的数字” 既然提到了不重复,我们应该首先想到的是Set集合,因为Set集合是会去重的,我们的蓝球只有一个,所以不管他是用什么集合,想用的话直接用数组也是可以的,我们这里使用了ArrayList集合,接下来是随机生成的六个数字,很简单,我们只需要使用Random类就可以实现,然后就是根据需求确定随机数的生成范围就可以了,下面是代码
做好以上的几步,我们的随机数的集合就已经产生好了,接下来我们要做的就是创建我们的键盘输入,这里没有什么难度,唯一需要注意的是如果客户不听话,乱输入超过了取值范围,或者让他输入数字,非要输出字符串的情况,好办,我们只需要在适当的地方加入判断并且对可能出现问题的代码块进行异常的捕获(学习阶段使用的方式)代码如下;
到目前为止我们已经可以看到中奖的号码与我们所输入的号码了,下面给客户添加一个“”小彩蛋”
(要是腹黑就让他等一分钟,再多就生气了)
元素随机生成和存储已经准备好了,我们自己输入的元素也准备好了,甚至小彩蛋都给到了,接下来也就来到了最关键的时刻了,也是我当时想了很就得一块,因为我们使用的是HashSet,我们要知道,HashSet是没有索引值的,所以我们没有办法直接取出他里面单个的元素进行比较,那怎么办呢,既然我们知道要提取出该元素需要此元素的索引值,那好办,我们让他有索引就好了啊,所以我们直接将HashSet转换为Object类型的数组(没有转成ArrayList的原因是反正也要转换,我们不如转换成我们熟悉的东西),转换为数组的HashSet就已经拥有了索引值,我们就可以将里面的值进行比较了,根据需求我们确定,中奖的前提是蓝色球相同,所以我们作出判断,只有在蓝色球相同的情况下才符合中奖的条件,不然肯定是没有中奖的(也要注意蓝色球相同,但是红色球有两个相同的情况),代码如下:
以上就是我们的所有代码了。大家可以尝试进行另外几种情况的尝试