• Java实现抽奖幸运儿



    版权声明

    • 本文原创作者:谷哥的小弟
    • 作者博客地址:http://blog.csdn.net/lfdfhl

    背景概述

    在抽奖、点名、拆盲盒时我们都需要随机实现某些功能。所以,我们可借助于Java中的随机数来进行相应模块的开发。

    第一版

    要求如下:

    • 1、数组中存放名字
    • 2、随机从数组中选择1个名字

    核心代码:

        public static void test1(){
            String[] namesArray = {"王小刚","李思思","杨倩倩","李大勇","姚期名","陶冰冰"};
            int length = namesArray.length;
            // 进行1次随机选择
            Random random = new Random();
            int number = random.nextInt(length);
            String name = namesArray[number];
            System.out.println("被选中的是:"+name);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    测试结果:
    在这里插入图片描述

    第二版

    要求如下:

    • 1、数组中存放名字
    • 2、随机从数组中选择10个名字
    • 3、请输出出现次数最多的名字

    核心代码:

    ComparatorImpl类,代码如下:

    import java.util.Comparator;
    import java.util.Map;
    /**
     * 本文作者:谷哥的小弟
     * 博客地址:http://blog.csdn.net/lfdfhl
     */
    public class ComparatorImpl implements Comparator<Map.Entry<String, Integer>> {
        @Override
        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
            int result = o1.getValue()-o2.getValue();
            return result;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    测试方法,代码如下:

     public static void test2(){
            String[] namesArray = {"王小刚","李思思","杨倩倩","李大勇","姚期名","陶冰冰"};
            int length = namesArray.length;
            HashMap<String,Integer> hashMap = new HashMap<>();
            // 随机进行10次选择
            for (int i=0;i<10;i++){
                Random random = new Random();
                int number = random.nextInt(length);
                String name = namesArray[number];
                System.out.println("被选中的是:"+name);
                Integer counter = hashMap.get(name);
                if(counter==null){
                    hashMap.put(name,1);
                }else{
                    hashMap.put(name,counter+1);
                }
            }
            System.out.println("------------------------");
            Set<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();
            Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();
            while(iterator.hasNext()){
                Map.Entry<String, Integer> entry = iterator.next();
                String key = entry.getKey();
                Integer value = entry.getValue();
                System.out.println(key+"被选中"+value+"次");
            }
            System.out.println("------------------------");
            //排序前对EntrySet进行遍历
            List<Map.Entry<String, Integer>> list = new ArrayList<>(entrySet);
            for (int i = 0; i < list.size(); i++) {
                Map.Entry<String, Integer> entry = list.get(i);
                System.out.println(entry);
            }
            System.out.println("------------------------");
            // 利用comparator依据Value对EntrySet进行排序
            ComparatorImpl comparator = new ComparatorImpl();
            Collections.sort(list, comparator);
            //排序后对EntrySet进行遍历
            for (int i = 0; i < list.size(); i++) {
                Map.Entry<String, Integer> entry = list.get(i);
                System.out.println(entry);
            }
            System.out.println("------------------------");
            // 获取出现次数最多的名字
            int size = list.size();
            Map.Entry<String, Integer> entry = list.get(size - 1);
            String name = entry.getKey();
            System.out.println(name);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    测试结果:
    在这里插入图片描述

    第三版

    要求如下:

    • 1、在本地txt文件中存放多个名字
    • 2、请随机选择10个名字
    • 3、请输出出现次数最多的名字

    核心代码:

    第四版

    要求如下:

    • 1、在本地Excel文件中存放多个名字
    • 2、请随机选择10个名字
    • 3、请输出出现次数最多的名字

    核心代码:

  • 相关阅读:
    米哈游大数据云原生实践
    【数据结构】静态分配的顺序表的按值查找和按位查找
    怎样才能做到C++入门到精通,看看大佬们是怎么做的!
    AXI_Round_Robin_Arbiter 设计 - AW、W通道部分
    2024最新 Jenkins + Docker实战教程(七)- Jenkins实现远程传输和自动部署
    备赛笔记:RCNN网络基础
    Pytest框架中fixture功能详解
    分布式 | 如何与 DBLE 进行“秘密通话”
    为什么软件公司很少用Python开发Web项目?
    文件真实类型识别 - linux c file
  • 原文地址:https://blog.csdn.net/lfdfhl/article/details/125430781