一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。

打印效果如下:(随机顺序,不一定是下面的顺序)

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]);

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值