所有可能的组合,从多个ArrayLists中选择一个项目

时间:2017-01-04 04:12:27

标签: java arraylist combinations

所以我正在尝试制作课程安排程序。该计划将包含特定学期提供的所有课程。用户将输入他想要在特定学期中学习的课程,并且该程序将基于用户输入生成所有可能的时间表。 (例如,一个特定的课程可能会在多个时段教授我的多个教师,这就是我所说的所有可能的时间表)

我采取的方法如下 我有一个Course课程,它存储有关特定课程的所有信息 我有一个CourseContainer,它有一个所有课程的ArrayList 我很难生成所有可能的时间表 到目前为止,我有一个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;
}

这样我就拥有了用户想要的所有课程的多个arraylists。 我无法弄清楚如何从中获得这些组合。

如果有人能告诉我如何做到这一点或更好的方式,我将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:0)

您想要使用地图。

创建一个地图,其中包含课程名称与课程列表的映射,然后像这样使用它:

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;
}

答案 1 :(得分:0)

我不完全了解您的实施,但听起来您有每个时段的课程列表。

如果您有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