先看题:
一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序) 888元的奖金被抽出 588元的奖金被抽出 10000元的奖金被抽出 1000元的奖金被抽出 2元的奖金被抽出
这个我想了一个下午加一个上午,最后还是参考了别人的代码:
首先应题目要求,奖项出现顺序随机且不重复。
“随机”可以用Random抽取数组下标来实现。
“不重复”就判断每次随机出来的元素是否存在新数组中,遍历新数组跟元素进行比较。
但什么时候生成元素?存在应该怎么办?不存在需要做什么操作吗?
脑子浆糊理不清思路,最后还是参考了题目的代码。
附上代码:
public class Demo8 {
public static void main(String[] args) {
int[] a8 = new int[]{2,588,888,1000,10000};
//定义一个新数组
int[] b8 = new int[a8.length];
Random random = new Random();
//某元素放进新数组时的下标
int count = 0;
//当某元素放进新数组的下标等于原数组的长度时,条件不成立,说明已经不重复地将原数组中的数据输出了
while(count<a8.length){
//每次循环都在0到a8.length中随机生成整数
int index = random.nextInt(a8.length);
//判断随机生成的元素是否在新数组中存在
boolean flag = method8(a8[index],b8);
if(flag){//true:元素不在新数组中
//将元素值a8[index]放进b8[count]数组中
b8[count] = a8[index];
//下一次某元素放进新数组时所在的下标。如果某元素在新数组中 即flag=false,那么不会count再往下加
count++;
//输出原数组中满足随机且不重复条件的元素值
System.out.println("a8["+index+"]:"+a8[index]);
}
}
//说明:抽取的次数是不确定的,所以要用到while循环
}
public static boolean method8(int[] arr,int num){
for(int i=0;i<arr.length;i++){
if(arr[i] == num){
//元素num在新数组中,不给新数组赋值
return false;
}
}
return true;
}
}