所以我正在尝试制作课程安排程序。该计划将包含特定学期提供的所有课程。用户将输入他想要在特定学期中学习的课程,并且该程序将基于用户输入生成所有可能的时间表。 (例如,一个特定的课程可能会在多个时段教授我的多个教师,这就是我所说的所有可能的时间表)
我采取的方法如下 我有一个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。 我无法弄清楚如何从中获得这些组合。
如果有人能告诉我如何做到这一点或更好的方式,我将不胜感激。
谢谢!
答案 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