zoukankan      html  css  js  c++  java
  • 第十九章----java随即分组的方法

    package com.maya.test;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Random;
    
    public class RandomSelect {
        public static void main(String[] args) {
            String[] names = { "郇", "王", "焦", "刘", "尹", "吕", "巩", "董", "白", "朱", "封", "郭", "班",
                    "杨"};
            
            List<List<String>> gl = getGroup(names, 3);
            
            if(gl != null) {
                for (List<String> l : gl) {
                    System.out.println(l);
                }
            }
        }
    
        /**
         * 获取随机数
         */
        public static int getRandom(int i) {
            Random r = new Random();
            return r.nextInt(i);
        }
    
        /**
         * 进行分组 els 需要进行分组的成员 groups 需要分成几组
         */
        public static List<List<String>> getGroup(String[] els, int groups) {
            // 判断验证
            if (els.length < (groups * 2)) {
                System.out.println("分组数过多! 最多只能分" + (els.length / 2) + "组");
                return null;
            }
            if (groups == 1) {
                System.out.println("分组数不能为1组");
                return null;
            }
            // 数据源的list
            List<String> list = new ArrayList<String>();
            // 作为结果返回的list
            List<List<String>> groupsList = new ArrayList<List<String>>();
            // List<Map<String, String>> groupsList = new ArrayList<List<String>>();
            // 往数据源里面添加数据
            for (int i = 0; i < els.length; i++) {
                list.add(els[i]);
            }
            // 随机打乱一下顺序
            Collections.shuffle(list);
            // 计算一下每组多少人
            int peoples = els.length / groups;
            // 分组开始
            for (int i = 0; i < groups; i++) {
                List<String> group = new ArrayList<String>();
                for (int j = 0; j < peoples; j++) {
                    int random = getRandom(list.size());
                    group.add(list.get(random));
                    list.remove(random);
                }
                groupsList.add(group);
            }
            // 最后剩下的人再重新分配一遍
            for (int i = 0; i < list.size(); i++) {
                groupsList.get(i).add(list.get(i));
            }
            return groupsList;
        }
    }

    这个随即分组的思想可以在很多地方运用

  • 相关阅读:
    Docker 安装ELK之 zz
    Linux使用Aria2命令下载BT种子/磁力/直链文件 转载
    新路由3newifi3路由器刷机newifi3breed解锁小白刷机教程路由器刷breed老毛子Padavan固件
    从ServerSwitch到SONiC Chassis:数据中心交换机技术的十年探索历程
    SONiC项目的发展及其相关介绍(转载)
    linux后台运行和关闭、查看后台任务
    tsar安装和使用
    浅谈CLOSE_WAIT
    贾扬清牛人(zz)
    Linux Soft-RoCE implementation (zz)
  • 原文地址:https://www.cnblogs.com/yuanlaihenkuang/p/7008420.html
Copyright © 2011-2022 走看看