注:第一个是面向对象;
要求:
一个教学单位有假设有n个学生选课,老师要求将学生进行分组,并对每次作业进行小组展示,请按照要求分组并选出展示的主讲人
1)请将学生随机选择进行分组,每五个人一组,最后剩余不够五个自动归为一组。
2)对上面的分组随机进行选择1/5的小组;
3)从上面的选出的小组每个小组中随机选出一人作为主讲人。
面向对象实现:
package homework;
import java.util.ArrayList;
import java.util.Random;
//学生
public class Student {
private int age;
private String num;//学号
public Student(int age) {
this.age = age;
}
public Student(String num) {
this.num = num;//学号
}
public String getnum() {
return num;//取学号
}
public int getAge() {
return age;
}
}
//小组
class Group{
private String num;//小组编号num
private ArrayList<Student> groups=new ArrayList<>();
//方法
public Group(Student st) {
groups.add(st);//构造方法
}
public Group(String num) {
this.num=num;//构造方法
}
public String getnum() {
return num;//取小组编号
}
public int getsize() {
return groups.size();//取小组人数
}
public Student getstudent(int index) {
if(index<0||index>(getsize()-1)) {
System.out.println("输入有错误");
return null;
}else {
return groups.get(index);//取小组学生
}
}
public Student removestudent(int index) {
if(index<0||index>(getsize()-1)) {
System.out.println("输入有错误");
return null;
}else {
return groups.remove(index);//取并移出小组
}
}
public void addstudent(Student st) {
groups.add(st);//添加学生到小组
}
}
//教学单位
class TeachUnit{
private ArrayList<Student> Student_list = new ArrayList<Student>();//一个教学单位一个学生列表
private ArrayList<Group> group_list=new ArrayList<Group>();//总小组列表
// 创建总学生列表,N为学生总数,num为学号前固定格式
public TeachUnit(int N,String num) {
for (int i = 1; i <= N; i++) {
Student_list.add(new Student(String.format(num+"%02d", i)));
}
}
// 创建分组,告诉要分成几人一组
public void creategroup(int a) {
Random rand=new Random();
ArrayList<Group> group_list = new ArrayList<Group>();// group_list存储班级总小组
int count=1;//小组编号
int N=st_size();
for (int i = 0; i < N; i += a) {
Group group = new Group("第"+count+"组");
int end = Math.min(i + a, N);// 为了人数不足a人时,剩下的凑一组
for(int j=i;j<end;j++) {
group.addstudent(Student_list.remove(rand.nextInt(st_size())));
}
group_list.add(group);
count++;
}
this.group_list= group_list;
}
//抽组
public Group selectgroup() {
Random rand=new Random();
return group_list.remove(rand.nextInt(groupsize()));
}
//抽学生
public Student selectstudent(Group group) {
Random rand=new Random();
return group.removestudent(rand.nextInt(group.getsize()));
}
public int st_size() {
return Student_list.size();//返回学生人数
}
public int groupsize() {
return group_list.size();//返回总组数
}
}
//调用方法选人
class RandStudent {
public static void main(String[] args) {
// 给学生编号,用学号唯一的表示一名学生
int N = 98;// 班级学生总人数
TeachUnit unit=new TeachUnit(N,"4211461202");
unit.creategroup(5);//5人一组
int n=(int) Math.ceil(unit.groupsize()/5.0);//只抽1/5的小组
System.out.println("被选中的组和对应主讲人有:");
for(int i=0;i<n;i++) {
Group group=unit.selectgroup();//抽组
Student st=unit.selectstudent(group);//从这个组里抽学生
System.out.println(group.getnum()+"的主讲人学号为:"+st.getnum());
}
}
}
面向过程:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Main {
public static void main(String[] args) {
int totalStudents = 35; // 假设有35个学生选课
int groupSize = 5;
// 创建学生列表
List<Integer> students = new ArrayList<>();
for (int i = 1; i <= totalStudents; i++) {
students.add(i);
}
// 随机分组
Collections.shuffle(students);
List<List<Integer>> groups = new ArrayList<>();
for (int i = 0; i < totalStudents; i += groupSize) {
int end = Math.min(i + groupSize, totalStudents);
groups.add(students.subList(i, end));
}
// 输出分组情况
System.out.println("分组情况:");
for (List<Integer> group : groups) {
System.out.println(group);
}
// 随机选择1/5的小组
Random random = new Random();
int selectedGroupCount = groups.size() / 5;
List<List<Integer>> selectedGroups = new ArrayList<>();
for (int i = 0; i < selectedGroupCount; i++) {
int selectedIndex = random.nextInt(groups.size());
selectedGroups.add(groups.remove(selectedIndex));
}
// 输出被选中的小组
System.out.println("\n被选中的小组:");
for (List<Integer> group : selectedGroups) {
System.out.println(group);
}
// 从选中的小组中随机选择主讲人
System.out.println("\n主讲人:");
for (List<Integer> group : selectedGroups) {
int speaker = group.get(random.nextInt(group.size()));
System.out.printf("小组 %s 的主讲人是: %d\n", group, speaker);
}
}
}
这个程序首先创建了一个学生列表,并为每个学生分配一个从1到totalStudents
的唯一ID。接下来,使用Collections.shuffle()
方法随机打乱学生列表,然后按照每5个学生一组的规则进行分组。分组后,程序从所有小组中随机选择1/5的小组,最后在每个选中的小组中随机选择一名主讲人。
方法2:
package test1;
import java.util.ArrayList;
import java.util.Random;
public class Class1 {
int age;
String num;// 学号
public Class1(int age) {
this.age = age;
}
public Class1(String num) {
this.num = num;
}
public void print_name() {
System.out.println(num);
}
}
class rand_student {
public static void main(String[] args) {
// TODO 自动生成的方法存根
// 给学生编号,用学号唯一的表示一名学生
int N = 98;// 班级学生总人数
// Student_list存储总学生
ArrayList<Class1> Student_list = new ArrayList<Class1>();
for (int i = 1; i < N + 1; i++) {
if (i < 10) {
Student_list.add(new Class1("421146120" + i));
} else {
Student_list.add(new Class1("42114612" + i));
}
}
Random rand = new Random();
// group_list存储班级总小组
ArrayList<ArrayList<Class1>> group_list = new ArrayList<ArrayList<Class1>>();
int count = 0;
// gruop存储单个小组
ArrayList<Class1> group = new ArrayList<Class1>();
while (true) {
if (count != 5) {// 确保5人一组
group.add(Student_list.remove(rand.nextInt(N)));
N -= 1;// 分好组的人从总学生里面去除
count += 1;// count代表这个小组目前人数
} else {// 上一个小组满人了,应该建立新的小组,如果甚于人数大于5,那么按照原方法建组,
// 如果剩余人数小于等于5,那么剩余的直接一组
if (N > 5) {
count = 0;// 归零,重新计数
group_list.add(new ArrayList<Class1>(group));// add一次代表一个小组
group.clear();// 清空,重新建组
} else {
group_list.add(Student_list);// 剩下的学生直接一组
break;// 全部学生都组好队伍了,退出while循环
}
}
}
// 开始抽组抽人
int group_num = group_list.size();// 总组数,
int n = (int) Math.ceil(group_num / 5.0), j = 0;// 选出1/5的小组
ArrayList<Integer> group_rand_ago = new ArrayList<Integer>();
while (j != n) {
int group_rand = rand.nextInt(group_num);// 新生成要抽到的组
if (group_rand_ago.contains(group_rand)) {// 防止抽到相同小组
continue;
} else {
int student_rand = rand.nextInt(group_list.get(group_rand).size());//此小组人数
System.out.print("抽到的小组为:" + (group_rand + 1) + "组 " + "第" + (student_rand + 1) + "个学生为主讲人 " + "学号为:");
System.out.println(group_list.get(group_rand).get(student_rand).num);
j++;
}
group_rand_ago.add(group_rand);// 上一次被抽到的组
}
}
}
方法3:
package homework;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
//学生
public class Student {
int age;
String num;// 学号
public Student(int age) {
this.age = age;
}
public Student(String num) {
this.num = num;
}
}
//选主讲人
class rand_Student {
public static void main(String[] args) {
// 给学生编号,用学号唯一的表示一名学生
int N = 98;// 班级学生总人数
// 将班级学生编号(学号)
ArrayList<Student> studentlist=teach_unit.Studentlist(N,"4211461202");
//将学生分组
ArrayList<ArrayList<Student>> grouplist=teach_unit.creategroup(studentlist, 5);
//抽一些小组出来
int n=(int) Math.ceil(grouplist.size()/5.0);//只抽1/5的小组
System.out.println("被选中的小组有:");
List<ArrayList<Student>> selectgroup=teach_unit.selectgroup(grouplist, n);
for(int i=0;i<n;i++) {
System.out.println("第"+(i+1)+"个组为:"+selectgroup.get(i));
}
//再从这些组里面分别选出一名主讲人
for(int i=0;i<n;i++) {
System.out.print("第"+(i+1)+"个组的主讲人为:"+teach_unit.selectstudent(selectgroup.get(i), 1));
System.out.println(" 其学号是:"+teach_unit.selectstudent(selectgroup.get(i), 1).get(0).num);
}
}
}
//教学单位
class teach_unit{
// 创建总学生列表,N为学生总数,num为学号前固定格式
public static ArrayList<Student> Studentlist(int N,String num) {
ArrayList<Student> Student_list = new ArrayList<Student>();
for (int i = 1; i <= N; i++) {
Student_list.add(new Student(String.format(num+"%02d", i)));
}
return Student_list;// Student_list存储总学生
}
// 创建分组,属于学生列表,并告诉要分成几人一组
public static ArrayList<ArrayList<Student>> creategroup(ArrayList<Student> studentlist, int a) {
Collections.shuffle(studentlist);// 打乱学生列表
// group_list存储班级总小组
ArrayList<ArrayList<Student>> group_list = new ArrayList<ArrayList<Student>>();
for (int i = 0; i < studentlist.size(); i += a) {
int end = Math.min(i + 5, studentlist.size());// 为了人数不足a人时,剩下的凑一组
group_list.add(new ArrayList<Student>(studentlist.subList(i, end)));
}
return group_list;
}
// 先从group_list随机抽a组
public static List<ArrayList<Student>> selectgroup(ArrayList<ArrayList<Student>> group_list, int a) {
Collections.shuffle(group_list);// 打乱小组列表
return group_list.subList(0, a);
}
// 在从被抽中的组里面选a个人出来
public static List<Student> selectstudent(ArrayList<Student> list, int a) {
Collections.shuffle(list);
return list.subList(0, a);
}
}