1,分组代码介绍
有时候我们会经常遇到分组的问题,然后考虑到各种的因素就会导致分组不公平,今天简单的用一个java代码解决分组随机且公平的问题。
demo中有两个方法,第一个方法,读取本地txt文件,文件中存放我们需要分组的人员,将我们按行读取到的人员,通过分隔符分割,然后存到列表中,并返回列表。第二个方法,以列表为参数,创建一个新列表,通过随机产生列表的索引,然后通过索引获取数据,判断数据是否在新列表中,不在就插入,并根据索引移除在参数列表的此数据。最后并将分组的小组名单以文件的形式进行保存。
输入名单为
随机分组的名单为
2,demo
package io;
import java.io.*;
import java.util.*;
/**
* project_name: JavaDemo
* filename: GroupDemo
* IDE: IntelliJ IDEA
* author: ganxiang
* CreateDate:2020-07-19 17:20
*/
public class GroupDemo {
//1,将txt中的数据存到list中
private List<String> readLocalTxt() throws Exception {
String path="D:\\StudyDemo\\IDEA\\JavaDemo\\io\\read\\information.txt";
InputStreamReader reader =new InputStreamReader(new FileInputStream(path));
BufferedReader br=new BufferedReader(reader);
String s;
List<String> stringList =new ArrayList<>();
while ((s=br.readLine())!=null){
String[] tmp =s.split(",");
// System.out.println(s);
stringList.addAll(Arrays.asList(tmp));
}
br.close();
reader.close();
// System.out.println(stringList.toString());
return stringList;
}
//2,对list中的数据进行无重复的随机取出
private void printRandom(int n,List<String> list) throws Exception {
String path="D:\\StudyDemo\\IDEA\\JavaDemo\\io\\read\\group.txt";
OutputStreamWriter writer =new OutputStreamWriter(new FileOutputStream(path));
BufferedWriter bw=new BufferedWriter(writer);
int m=list.size()/n;
for (int i = 1; i <= m; i++) {
List<String> stringList =new ArrayList<>();
for (int j = 1; j <=n ; ) {
int index = (int) (Math.random()* list.size());
if (!stringList.contains(list.get(index))) {
stringList.add(list.get(index));
list.remove(list.get(index));
j++;
}
}
System.out.println("第"+i+"小组的成员为:"+stringList.toString());
// System.out.println(list.toString());
bw.write("第"+i+"小组的成员为:"+stringList.toString().replace("["," ").replace("]"," ")+"\n");
stringList.clear();
}
bw.close();
}
public static void main(String[] args) throws Exception {
// System.out.println(new GroupDemo().readLocalTxt());
new GroupDemo().printRandom(6,new GroupDemo().readLocalTxt());
}
}
3,控制台打印
希望这个demo对感兴趣的朋友有所帮助,同时呢都看到这儿啦,点赞再走呗🌹🌹🌹😊。