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

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

------解决方案--------------------
package com.test;

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] k = new Test().group(9,58);
for(int i=0;i<k.length;i++){
System.out.print("第  "+i+" 组:    ");
for(int j=0;j<k[i].length;j++){
System.out.print(k[i][j]+"  ");
}
System.out.println();
}
}
public int[][] group(int m,int all){
//m 每组几人
int temp = 0;
int i = 0,j = 0;
int[][] k = null;
int[] allpeoples = new int[all];
for(i = 0;i < allpeoples.length;i ++){
allpeoples[i] = i + 1;
}
for(j = 0;j < 3;j ++){
for(i = 0;i < allpeoples.length;i ++){
int rand1 = (int)(Math.random()*allpeoples.length);
int rand2 = (int)(Math.random()*allpeoples.length);
temp = allpeoples[rand1];
allpeoples[rand1] = allpeoples[rand2];
allpeoples[rand2] = temp;
}
}

int a = 58/m;//组数
int b = 58%m;
if(b == 0){
k = new int[a][m];
int step = 0;
for( i = 0;i < a;i ++){
k[i] = new int[m];
for(j = 0;j < m;j ++){
k[i][j] = allpeoples[step];
step ++;
}
}
}else{
//b = b + 1;
k = new int[a+1][m];
int step = 0;
for(i = 0;i < a;i ++){
k[i] = new int[m];
for(j = 0;j < m;j ++){
k[i][j] = allpeoples[step];
step ++;
}
}
k[a] = new int[b];
for(i = 0;i < k[a].length;i ++){
k[a][i] = allpeoples[step];
step ++;
}
}
return k;
}
}

------解决方案--------------------
其实这个问题实质就是让你做一个不重复的随机数序列,楼上的可以满足要求,另外你可以试试作如下操作:将student[]{1,2,3...58}58个数组,通过Random类的nextInt()方法随机产生一个0-57的下角标,将其对应的数组值和该数组最后一个值student[n]交换位置,然后继续从余下的57个数组中在随机去一个数组,与student[n-1](初始n为57)值交换,继续从余下的56位中随机去一个值,以此类推。代码也就50行左右吧,自己写吧,太简单了,另外你可以到网上查一下产生不重复随机数列的方法,从中挑一个就好了。
------解决方案--------------------
路过