java—所有可能的组合,从多个ArrayList中选择一项

1sbrub3j  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(311)

这个问题在这里已经有答案了

从多个列表中生成所有组合(10个答案)
四年前关门了。
所以我想做一个课程安排。该课程将包含特定学期提供的所有课程。用户将输入他想在一个特定学期学习的课程,程序将根据用户的输入生成所有可能的时间表(例如,一个特定的课程可能在多个时间段内教给我的多名导师,这就是我所说的所有可能的时间表)
我采取的方法是这样的,我有一个课程类,它存储了关于一个特定课程的所有信息,我有一个coursecontainer,它有一个所有课程的数组列表,我很难生成所有可能的时间表,到目前为止,我有一个getallcourse方法

public ArrayList<Courses> getAllCourse(String name){
    ArrayList<Courses> all = new ArrayList<>();
    for (Courses  course : container) {
        if (course.getName().equals(name))
            all.add(course);
    }
    return all;
}

这样我就有了用户想要的所有课程的多个ArrayList。我想不出怎么把这些组合从这里面取出来。
如果有人能告诉我怎么做或更好的方法,我将不胜感激。
谢谢您!

r6vfmomb

r6vfmomb1#

你想改用Map。
创建一个Map,其中包含课程名称与课程列表的Map,然后按如下方式使用它:

private final Map<String, List<Courses>> container = initializeIt();

public ArrayList<Courses> getAllCourse(String name){
    ArrayList<Courses> all = new ArrayList<>();
    List<Courses> courses = container.get(name);
    if(courses != null) all.addAll(courses);
    return all;
}
eulz3vhy

eulz3vhy2#

我不完全理解你的实现,但听起来你有一个每个时段的课程列表。
如果有3个时隙,可以使用3个嵌套循环来创建所有可能的组合。我稍微简化了一下,用了 String 而不是 Course :

List<String> timeslot1 = new ArrayList<String>();
timeslot1.add("Maths");
timeslot1.add("English");

List<String> timeslot2 = new ArrayList<String>();
timeslot2.add("Science");
timeslot2.add("History");

List<String> timeslot3 = new ArrayList<String>();
timeslot3.add("Italian");
timeslot3.add("Geography");

// a list of all the possible course combinations
List<List<String>> timetables = new ArrayList<List<String>>();

// create the course combinations
for(String course1 : timeslot1) {
    for(String course2 : timeslot2) {
        for(String course3 : timeslot3) {
            List<String> timetable = new ArrayList<String>();
            timetable.add(course1);
            timetable.add(course2);
            timetable.add(course3);

            timetables.add(timetable);
        }
    }
}

// print them
for(List<String> timetable : timetables) {
    System.out.println(String.format("%s, %s, %s", timetable.get(0), timetable.get(1), timetable.get(2)));
}

具有以下输出:

Maths, Science, Italian
Maths, Science, Geography
Maths, History, Italian
Maths, History, Geography
English, Science, Italian
English, Science, Geography
English, History, Italian
English, History, Geography

相关问题