红包抽奖问题:

看视频觉得这道题很好:

一个大V直播抽奖,奖品是现金红包,分别有{2, 588 , 888, 1000, 10000}五个奖金。

请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。

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

888元的奖金被抽出

588元的奖金被抽出

10000元的奖金被抽出

1000元的奖金被抽出

2元的奖金被抽出

代码如下:

import java.util.Random;

public class comTest4 {
    public static void main(String[] args) {
        //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 < 5; ) {//为啥不在这里i++嘞?因为我抽的奖项必须得有效
            // 假设我第一次抽的10000,万一我第二次抽的还是1000嘞,这就不能++了吧
            //获取arr数组中的随机索引,就能获得出一个随机奖项
            int randonIndex = r.nextInt(arr.length);
            int prize = arr[randonIndex];
            //紧接着得判断这个奖项还在不在,万一被抽走了就得重新抽吧,这也是第13行为啥不能++的原因,那咋判断嘞,可以用一个单独的方法来判断
            //调用方法来判断
            boolean flag = judge(newArr, prize);
            if (!flag) {//如果为false,则把抽到的这个奖项放入newArr数组中,然后就能移动索引到下一个了
                newArr[i] = prize;
                i++;
            }
        }
        System.out.println("抽奖顺序为:");
        //4.最后再来遍历newArr数组,看看抽奖的顺序
        for (int j = 0; j < newArr.length; j++) {
            System.out.println(newArr[j]);
        }


    }

    //判断奖项是否存在的方法
    //存在就是ture,不存在就是false
    public static boolean judge(int[] arr, int prize) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == prize) {
                return true;
            }
        }
        return false;
    }//这样,用来判断奖项是否存在的方法就写好了,然后再反过头去判断上面抽到的奖项


}

运行结果:

抽奖顺序为:
10000
888
588
1000
2

Process finished with exit code 0

还可以换个思路,先把奖池打乱,然后抽奖,也是游戏者的抽奖顺序

代码如下:

import java.util.Random;

public class comTest5 {
    public static void main(String[] args) {
//一种新思路:把奖池中所有奖项打乱,在进行抽取,也就是游戏者的抽奖顺序
        //1.定义一个数组用来存储奖项
        int[] arr = {2, 588, 888, 1000, 10000};
        Random r = new Random();
        //2.打乱奖池
        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;
        }
        System.out.println("抽奖顺序为:");
        //3.遍历奖池
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }


    }
}

运行结果:

抽奖顺序为:
588
10000
1000
2
888

Process finished with exit code 0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值