打印效果如下:(随机顺序,不一定是下面的顺序)
888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出
思路一
从奖池里抽出奖项,存入新的数组里面,再遍历新数组
import java.util.Random;
public class Test10 {
public static void main(String[] args) {
//抽奖实现
/*
一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。
请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
打印效果如下:(随机顺序,不一定是下面的顺序)
888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出
*/
//1.定义一个数组存储奖项
int[] arr = {2, 588, 888, 1000, 10000};
//2.再定义一个存储已经抽出的奖项
int[] newArr = new int[arr.length];
Random r = new Random();
for (int i = 0; i < 5;) {//这里出错一次,忘记删i++
int prize = arr[r.nextInt(arr.length)];
boolean flag = contain(newArr, prize);
if (!flag) {
newArr[i] = prize;
i++;
}
}
//遍历新数组输出
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
//定义一个方法,用于判断数组里是否有某个数字
public static boolean contain(int[] newArr, int prize) {
for (int i = 0; i < newArr.length; i++) {
if (newArr[i] == prize) {
//有返回true
return true;
}
}
//遍历完成后,没有返回false
return false;
}
}
思路二
打乱原数组顺序,遍历数组,效率更高
import java.util.Random;
public class Test11 {
public static void main(String[] args) {
//抽奖代码优化
int[] arr = {2, 588, 888, 1000, 10000};
//1.打乱奖池
//数组打乱,把每一个数组元素和一个随机元素交换
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int randomIndex = r.nextInt(arr.length);
int temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
//2.遍历奖池
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}