问题:我怎样才能有效地只使用一个人,然后当代码再次运行时,它就不会将同一个学生分配给一个组。基本上不用学生两次。我试图解决这个问题,但是它使我陷入了死胡同。任何帮助都是感激的,谢谢!
创建这个班学生的数组(名和姓)。
然后随机选择一个学生,并将他们分组。
1-4组学生
2-4组学生
第3-3组学生
第4-4组学生
第五至第四组学生
第6-4组学生
然后在有组织的输出中打印出组。代码:
import java.util.*;
public class RandomGroupsTest {
static String[] group = {"Group 1","Group 2","Group 3", "Group 4","Group 5", "Group 6"};
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] students= {"Krish", "Mami Bhat", "Kilar Boggavarapu", "Nickel Gokul", "Matthew Guan", "Maysin Huang", "Kashan Karvadi", "Kilan Manivannan", "Dine Marin", "Dhruv Patel", "Mans Patel", "Vin Pham", "Sonyiea Rayman", "Mahi Sangavarapu", "Reyun Shah", "Prevan Shanmugaraj", "Riya Singh", "Palk Singh", "Rohan Singh", "Callvin Stapleton", "Arjun Vyas", "John Williams", "Alisha White" };
Random rn = new Random();
int a =0;
int i = 0;
group[i] = "Group 1";
System.out.print("Group 1: ");
if(group[i].equals("Group 1")) {
for(int d = 0; d < 4; d++) {
a = rn.nextInt(23);
if(students[a]!="") {
System.out.print("\n "+students[a]);
students[a]= "";
}else {
a=rn.nextInt(23);
if(students[a]!="") {
System.out.println("\n "+students[a]);
}
}
}
i++;
System.out.println();
}
System.out.print("Group 2: ");
if(group[i].equals("Group 2")) {
for(int w = 0; w < 4; w++) {
a = rn.nextInt(23);
if(students[a]!="") {
System.out.print("\n "+students[a]);
students[a]= "";
}else {
a=rn.nextInt(23);
if(students[a]!="") {
System.out.println("\n "+students[a]);
}
}
}
i++;
System.out.println();
}
System.out.print("Group 3: ");
if(group[i].equals("Group 3")) {
for(int v = 0; v < 3; v++) {
a = rn.nextInt(23);
if(students[a]!="") {
System.out.print("\n "+students[a]);
students[a]= "";
}else {
a=rn.nextInt(23);
if(students[a]!="") {
System.out.println("\n "+students[a]);
}
}
}
i++;
System.out.println();
}
System.out.print("Group 4: ");
if(group[i].equals("Group 4")) {
for(int b = 0; b < 4; b++) {
a = rn.nextInt(23);
if(students[a]!="") {
System.out.print("\n "+students[a]);
students[a]= "";
}else {
a=rn.nextInt(23);
if(students[a]!="") {
System.out.println("\n "+students[a]);
}
}
}
i++;
System.out.println();
}
System.out.print("Group 5: ");
if(group[i].equals("Group 5")) {
for(int w = 0; w < 4; w++) {
a = rn.nextInt(23);
if(students[a]!="") {
System.out.print("\n "+students[a]);
students[a]= "";
}else {
a=rn.nextInt(23);
if(students[a]!="") {
System.out.println("\n "+students[a]);
}
}
}
i++;
System.out.println();
}
System.out.print("Group 6: ");
if(group[i].equals("Group 6")) {
for(int n = 0; n< 4; n++) {
a = rn.nextInt(23);
if(students[a]!="") {
System.out.print("\n "+students[a]);
students[a]= "";
}else {
a=rn.nextInt(23);
if(students[a]!="") {
System.out.println("\n "+students[a]);
}
}
}
i++;
System.out.println();
}
}
}发布于 2020-03-11 20:46:36
它可以很容易地解决使用一维阵列和一级深嵌套循环。下面给出的解决方案很容易理解:
import java.util.Random;
public class Main {
public static void main(String[] args) {
String[] students = { "Krish", "Mami Bhat", "Kilar Boggavarapu", "Nickel Gokul", "Matthew Guan", "Maysin Huang",
"Kashan Karvadi", "Kilan Manivannan", "Dine Marin", "Dhruv Patel", "Mans Patel", "Vin Pham",
"Sonyiea Rayman", "Mahi Sangavarapu", "Reyun Shah", "Prevan Shanmugaraj", "Riya Singh", "Palk Singh",
"Rohan Singh", "Callvin Stapleton", "Arjun Vyas", "John Williams", "Alisha White" };
int[] groupCapacity = { 4, 4, 3, 4, 4, 4 };
int[] indexUsed = new int[students.length];
Random rn = new Random();
int n;
for (int i = 0; i < groupCapacity.length; i++) {
System.out.println("Group" + (i + 1 + ": "));
for (int j = 0; j < groupCapacity[i]; j++) {
n = rn.nextInt(23);
if (indexUsed[n] != 1) {
System.out.println(students[n]);
indexUsed[n] = 1;
} else {
j--;
}
}
System.out.println();
}
}
}示例运行:
Group1:
Maysin Huang
Reyun Shah
Callvin Stapleton
Kashan Karvadi
Group2:
Dine Marin
Prevan Shanmugaraj
Arjun Vyas
Rohan Singh
Group3:
Vin Pham
Mami Bhat
Matthew Guan
Group4:
Mahi Sangavarapu
Kilan Manivannan
Palk Singh
Dhruv Patel
Group5:
John Williams
Krish
Riya Singh
Mans Patel
Group6:
Alisha White
Kilar Boggavarapu
Sonyiea Rayman
Nickel Gokul如有任何疑问/问题,请随时发表意见。
发布于 2020-03-11 18:37:16
随机挑选一个学生的最简单的方法是把他们列在如下列表中:
List<String> students = new ArrayList<>(List.of("Krish",
"Mami Bhat", "Kilar Boggavarapu", "Nickel Gokul",
"Matthew Guan", "Maysin Huang", "Kashan Karvadi",
"Kilan Manivannan", "Dine Marin", "Dhruv Patel",
"Mans Patel", "Vin Pham", "Sonyiea Rayman",
"Mahi Sangavarapu", "Reyun Shah",
"Prevan Shanmugaraj", "Riya Singh", "Palk Singh",
"Rohan Singh", "Callvin Stapleton", "Arjun Vyas",
"John Williams", "Alisha White"));那就洗牌吧。
Collections.shuffle(students);现在,只需使用students.size()从0到students.get()顺序访问列表。
如果只允许使用数组,则可以这样做。
String[] students = {"Krish",
"Mami Bhat", "Kilar Boggavarapu", "Nickel Gokul",
"Matthew Guan", "Maysin Huang", "Kashan Karvadi",
"Kilan Manivannan", "Dine Marin", "Dhruv Patel",
"Mans Patel", "Vin Pham", "Sonyiea Rayman",
"Mahi Sangavarapu", "Reyun Shah",
"Prevan Shanmugaraj", "Riya Singh", "Palk Singh",
"Rohan Singh", "Callvin Stapleton", "Arjun Vyas",
"John Williams", "Alisha White"};
int length = students.length;
Random r = new Random();
public String getNextStudent() {
if (length == 0) {
return null;
}
// pick a number from 0 to length
int pick = r.nextInt(length);
// get that student
String student = students[pick];
// copy last student to picked students slot
students[pick] = students[length-1];
// update length
length--;
return student;
}如果你收到了null value,那么就没有学生了。请注意,这将破坏列表。如果您想保存列表,那么只需将最后一个学生替换为所选的学生。由此产生的列表本身将是随机的。
发布于 2020-03-11 18:44:41
维护所有字符串对象的列表。为了提高效率,我通常会使用一个集合,但是我们需要相当快地从集合中获取一个随机元素,所以列表似乎是合适的。然后,在每个创建中,我们从基础列表中删除String列表。由于某种原因,似乎有3个名字还在(抬头)!
public static void main(String[] args) {
List<String> names = new ArrayList<>(Arrays.asList(
"Krish", "Mami Bhat", "Kilar Boggavarapu", "Nickel Gokul",
"Matthew Guan", "Maysin Huang", "Kashan Karvadi", "Kilan Manivannan",
"Dine Marin", "Dhruv Patel", "Mans Patel", "Vin Pham", "Sonyiea Rayman",
"Mahi Sangavarapu", "Reyun Shah", "Prevan Shanmugaraj", "Riya Singh",
"Palk Singh", "Rohan Singh", "Callvin Stapleton", "Arjun Vyas",
"John Williams", "Alisha White"));
Random random = new Random();
List<List<String>> groups = groups(random, names, 4, 4, 3, 4, 4, 4);
for (List<String> group : groups) {
System.out.println("Group: " + group);
}
}
static List<List<String>> groups(Random random, List<String> names, int... groupSizes) {
return IntStream.of(groupSizes).mapToObj(size -> createGroup(random, names, size)).collect(Collectors.toList());
}
static List<String> createGroup(Random random, List<String> names, int size) {
List<String> result = new ArrayList<>(size);
while (size-- > 0) {
int index = random.nextInt(names.size());
result.add(names.get(index));
}
names.removeAll(result);
return result;
}https://stackoverflow.com/questions/60642368
复制相似问题