抽奖的实现
- 需求:
一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序) - 效果:
888元的现金被抽出
588元的现金被抽出
1000元的现金被抽出
2元的现金被抽出
10000元的现金被抽出 - 核心思想:使数组元素乱序输出
方法一:
定义一个新数组用来储存已经被抽到的奖品,然后判断随机抽到的奖品是否在新数组中,如果不在,则表示抽中,如果在,则无法抽中,重新抽
import java.util.Random;
public class FDemo {
public static void main(String[] args) {
/*
* 抽奖的两种实现方式
* 需求:
* 一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,
* 打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
* 效果:
* 888元的现金被抽出
* 588元的现金被抽出
* 1000元的现金被抽出
* 2元的现金被抽出
* 10000元的现金被抽出
* */
//核心思想:使数组元素乱序输出
//方法一:定义一个新数组用来储存已经被抽到的奖品,
// 然后判断随机抽到的奖品是否在新数组中,如果不在,则表示抽中,如果在,则无法抽中,重新抽
//1.定义数组表示奖池
int[] arr = {2,588,888,1000,10000};
//2.定义新数组用来储存已经被抽到的奖品
int[] newArr = new int[arr.length];
//3.抽奖
Random r = new Random();
//有几个奖项,就循环几次
for (int i = 0; i < arr.length;) {
//获取随机索引
int randomIndex = r.nextInt(arr.length); //[0,arr.length)
//获取奖项
int prize = arr[randomIndex];
//判断当前的奖项是否已被抽取走,如果已被抽取走(true),则重新抽取,否则就表示抽中该奖项
boolean flag = contains(newArr,prize);
if(!flag){
//把当前抽取到的奖项添加到newArr当中
newArr[i] = prize;
//添加完毕之后,移动索引
i++;
}
}
//4.打印奖项
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]+"元的现金被抽出");
}
}
//contains方法:判断奖品prize是否在数组arr中
//存在:true 不存在:false
public static boolean contains(int[] arr,int prize){
for (int i = 0; i < arr.length; i++) {
if (prize == arr[i]){
return true; //奖品已经被抽取过了
}
}
return false; //已抽中奖品数组中没有该奖品,奖品未被抽中
}
}
方法二:
直接将存储奖池的数组里的元素顺序打乱,再输出即可
import java.util.Random;
public class FDemo {
public static void main(String[] args) {
/*
* 抽奖的两种实现方式
* 需求:
* 一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,
* 打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
* 效果:
* 888元的现金被抽出
* 588元的现金被抽出
* 1000元的现金被抽出
* 2元的现金被抽出
* 10000元的现金被抽出
* */
//核心思想:使数组元素乱序输出
//方法二:直接将存储奖池的数组里的元素顺序打乱,再输出即可
//1.把奖池里面的所有奖项打乱顺序
int[] arr = {2,588,888,1000,10000};
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
//获取随机索引
int randomIndex = r.nextInt(arr.length);
//用索引i和随机索引randomIndex上的元素进行交换
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
//2.遍历奖池,从0索引开始获取每一个奖项
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]+"元的现金被抽出");
}
}
}