首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组和擦除索引的问题

数组和擦除索引的问题
EN

Stack Overflow用户
提问于 2020-03-11 18:24:03
回答 3查看 52关注 0票数 0

问题:我怎样才能有效地只使用一个人,然后当代码再次运行时,它就不会将同一个学生分配给一个组。基本上不用学生两次。我试图解决这个问题,但是它使我陷入了死胡同。任何帮助都是感激的,谢谢!

创建这个班学生的数组(名和姓)。

然后随机选择一个学生,并将他们分组。

1-4组学生

2-4组学生

第3-3组学生

第4-4组学生

第五至第四组学生

第6-4组学生

然后在有组织的输出中打印出组。代码:

代码语言:javascript
复制
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();
    }

    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-11 20:46:36

它可以很容易地解决使用一维阵列和一级深嵌套循环。下面给出的解决方案很容易理解:

代码语言:javascript
复制
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();
        }
    }
}

示例运行:

代码语言:javascript
复制
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

如有任何疑问/问题,请随时发表意见。

票数 0
EN

Stack Overflow用户

发布于 2020-03-11 18:37:16

随机挑选一个学生的最简单的方法是把他们列在如下列表中:

代码语言:javascript
复制
    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"));

那就洗牌吧。

代码语言:javascript
复制
        Collections.shuffle(students);

现在,只需使用students.size()从0到students.get()顺序访问列表。

如果只允许使用数组,则可以这样做。

代码语言:javascript
复制
        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,那么就没有学生了。请注意,这将破坏列表。如果您想保存列表,那么只需将最后一个学生替换为所选的学生。由此产生的列表本身将是随机的。

票数 1
EN

Stack Overflow用户

发布于 2020-03-11 18:44:41

维护所有字符串对象的列表。为了提高效率,我通常会使用一个集合,但是我们需要相当快地从集合中获取一个随机元素,所以列表似乎是合适的。然后,在每个创建中,我们从基础列表中删除String列表。由于某种原因,似乎有3个名字还在(抬头)!

代码语言:javascript
复制
    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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60642368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档