题目:
一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
要求:
打印效果如下:(随机顺序,不一定是下面的顺序)
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出
888元的奖金被抽出
分析:
+ 定义一个数组用于存储这些奖金金额。
+ 定义一个数组用于判断该奖金是否被取出过
+ 每次抽奖都随机一个索引,取出索引对应的奖金金额,判断该金额之前是否抽中过,抽中过从新抽一次。
关键点:
如何保证每次抽奖的金额不是之前抽过的
代码演示:
public class GrabARedEnvelope {
public static void main(String[] args) {
//红包中金额
int[] money = {
2,588,888,1000,10000};
//产生一个随机数
Random random = new Random();
// 用于判断该数是否被取出过
boolean[] boo = new boolean[5];
// 计数器,循环条件
int count = 0;
while (count < 5){
// 随机抽取
int index = random.nextInt(money.length);
// 如果值为ture,则代表该数被取出过,直接进入下一循环
if (boo[index]){
continue;
}
// 否则,将该数取出,并标记该数被取出过
else {
count++;
System.out.println(money[index]+"元的奖金被抽出");
boo[index] =true;
}
}
}
}