• java专题练习(抢红包)


    package 专题练习;
    
    import java.util.Random;
    
    public class grab_red_packet {
        /* 需求:
       直播抽奖,分别由{2,588,888,1000,10000}五个奖金,请用代码模拟抽奖,奖项出现顺序要随机且不重复
       打印效果:
       588元的奖金被抽出*/
        //思路:
        //1. 先用数组把奖金定义好
        //2. 用random方法给出随机数索引
        //3. 题目告诉长度为5.  随机数范围就是0-4
        //4. 难点:不能重复, 那就想办法不让随机数重复就好了
        //总结而言:其实就是一个循环嵌套,外循环来控制输入随机数,内循环来控制是否重复
    
        public static void main(String[] args) {
            //定义奖金数组
            int[] jiangjin = new int[]{2, 588, 888, 1000, 10000};
            //定义奖金已经出现数组
            int[] jiangjinhavebeen = new int[jiangjin.length];
            //直接调用 答案解出
            Restart(jiangjinhavebeen,jiangjin);
        }
        //抽取随机数的方法
        public static int Get_suijishu(int[] jiangjin){
            //就是随机生成一个数字
            Random r = new Random();
            int suijishu = r.nextInt(jiangjin.length);
            return suijishu;
        }
        //判断重复 重复返回-1   没重复返回1 (内循环)
        public static int Pan_duan_chongfu(int[] havebeenjiangjin,int []jiangjin,int suijishu){
            for (int j = 0; j < havebeenjiangjin.length; j++) {
                if(havebeenjiangjin[j] == jiangjin[suijishu]) {
                    return -1;
                }
            }
            return 1;
        }
        //外循环 (重复抽取随机数)
        public static void Restart(int[] jiangjinhavebeen,int[] jiangjin){
            for (int i = 0; i < jiangjinhavebeen.length; ) {
                //先外循环(实现随机数),后内循环(判断是否有重复,如果有重复,外循环次数-1,如果不重复,在外循环读出)
                //实现随机数(调用生成随机数方法)
                int suijishu = Get_suijishu(jiangjin);
                //调用 (判断是否重复方法)
                if(Pan_duan_chongfu(jiangjinhavebeen,jiangjin,suijishu) == 1){
                    jiangjinhavebeen[i] = jiangjin[suijishu];//如果没有重复,就把当前的已经抽出来的奖金录入到(已经出现过的奖金)的数组里面去
                    System.out.println(jiangjinhavebeen[i] + "元的奖金被抽出");
                }
                else{
                    System.out.println("随机数为:" + suijishu + "的奖品已经被抽出,请重新抽取");
                    i++; //如果重复,那么外循环的次数就不能增加,应该保持原次数(这里i--,循环条件里由i++,两者相加i刚好还是等于i)
                }
            } 
        }
        
        
        
        //其实这个题目也可以这样理解,就是把原数组打乱(用随机数)最后输出,个人觉得不如上面的代码给到用户信息及时和明确
        public static void mode_two(int[] jiangjin){
            
            for (int i = 0; i < jiangjin.length; i++) {
                int suijishu = Get_suijishu(jiangjin); //获取随机数
                int temp = jiangjin[i];
                jiangjin[i] = jiangjin[suijishu];
                jiangjin[suijishu] = temp;  
            }  //这样就打乱顺序了, 这样的算法也让博主很受启发.
            
            //遍历
            for (int i = 0; i < jiangjin.length; i++) {
                System.out.print(jiangjin[i]);
            }
        }
    }
    
  • 相关阅读:
    new bing功能使用
    OpenCV数字图像处理实战一:去水印(C++)
    Pytorch学习:torch.randn()
    新变化新营销 这些知识点你得 Get!(文末有 PPT 福利首次放送)
    【FreeRTOS(三)】任务状态
    【Vue3+Ts】—— webpack打包其他资源学习笔记(二)
    ArrayList源码分析
    Presto(Trino)从安装到使用
    如何开通 chatGPT4 会员
    执行上下文-通俗易懂版
  • 原文地址:https://blog.csdn.net/m0_74892619/article/details/133085596