冬天快来了,你准备好帽子了吗?

        先看题:

一个大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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_60808029/article/details/120778750