日期:2014-05-20  浏览次数:20671 次

java随机分组问题求解
在main函数中完成下面功能:实现对班上同学的自动分组,从键盘输入一个整数m(m在2到10之间,表示每组需要m个人,最后不足m的构成一组),程序就能按照这个整数对全班58个人自动分组,(每组成员都是随机产生的),并输出各组成员的情况。

------解决方案--------------------
Java code

    static String[][] sp(final String[] cs, int tlen) {
        if (cs == null || tlen < 0) {
            return null;
        }
        String[] c = new String[cs.length];
        System.arraycopy(cs, 0, c, 0, c.length);

        //打乱
        Random ran = new Random();
        for (int i = c.length; i > 1; i--) {
            //产生随机数
            int r = ran.nextInt(i);
            //交换
            String buf = c[r];
            c[r] = c[i - 1];
            c[i - 1] = buf;
        }

        //分组后的组数
        int len = cs.length / tlen;
        if (cs.length > len * tlen) {
            len++;
        }
        String[][] re = new String[len][];
        //分组
        for (int i = 0, t = 0; i < cs.length; i += tlen, t++) {
            int clen;
            if (i + tlen > cs.length) {
                clen = cs.length - i;
            } else {
                clen = tlen;
            }
            String[] cstr = new String[clen];
            System.arraycopy(c, i, cstr, 0, clen);
            re[t] = cstr;
        }
        return re;
    }

------解决方案--------------------
Java code

public List<String[]> group(String [] str,int m){
        List<String> _student = new ArrayList<String>();
        for(int i=0;i<str.length;i++){
            _student.add(str[i]);
        }
        int n = _student.size();
        List <String[]> student = new ArrayList<String[]>();
        for(int i=0;i<m;i++){
            int size = n%m==0?n/m:(i==(m-1)?((n/m+1)*m-n):n/(m-1));
            String [] s = new String[size];
            int _size = _student.size();
                for(int j=0;j<size;j++){
                    int index = (int)(Math.random()*_size);
                    s[j] = _student.get(index);
                    _student.remove(index);
                    _size--;
                }
                student.add(s);
        }
        return student;
    }