我正在努力寻找一种在课程内部存储课程要求的有效方法。
例如:
我希望能够使用树形结构,这样我就可以轻松地检查一个人是否通过了所有要求,但是由于有多个选项可以通过要求,所以不可能。
您知道解决此问题的任何技术或数据结构吗?
答案 0 :(得分:2)
Course
对象具有Prerequisite
对象的列表,只需满足即可。 Prerequisite
对象包含必需的Course
对象的列表,所有这些元素都需要传递,以使Prerequisite
对象得到 。
public class Course {
private List<Prerequisite> prerequisites;
public boolean canBeTakenBy(Student student) {
return prerequisites.isEmpty() ||
prerequisites.stream().anyMatch(p -> p.isFulfilledBy(student));
}
}
public class Prerequisite {
private List<Course> requiredCourses;
public boolean isFulfilledBy(Student student) {
return requiredCourses.stream().allMatch(student::hasPassed);
}
}
public class Student {
private Set<Course> passedCourses;
public boolean hasPassed(Course course) {
return passedCourses.contains(course);
}
}
答案 1 :(得分:0)
您个人可以通过多种方式来完成自己想要的事情,我认为最简单的方法就是拥有ArrayList< ArrayList < Course > >
例如,如果您想添加一个可能的需求选项,则可以使用课程创建一个ArrayList
并将其推送到需求的末尾。
稍后进行检查,只需运行组合,复杂性就不成问题,例如,如果您有10个可能的要求,每个课程有10个课程,最坏的情况是10x10的循环,计算机的10²是完全没有。
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html