为了账号安全,请及时绑定邮箱和手机立即绑定

用于保存课程要求的数据结构

用于保存课程要求的数据结构

Smart猫小萌 2021-12-30 20:59:16
我正在努力寻找一种有效的方法来存储课程内课程的要求。例如:通过B后可以参加A课程当您通过C和D课程时,您也可以参加A课程我希望能够使用树结构,这样我就可以轻松检查一个人是否通过了所有要求,但由于有多个选项可以通过要求,这是不可能的。你知道任何技术或数据结构来解决这个问题吗?
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

一个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);

    }

}


查看完整回答
反对 回复 2021-12-30
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

有很多方法可以完成你想要的,我个人认为最简单的就是拥有一个 ArrayList< ArrayList < Course > >

因此,例如,如果您想添加一个可能的要求选项,您可以ArrayList使用课程创建一个并将其推送到要求的末尾。

稍后检查它,只需运行组合,复杂性应该不是问题,例如,如果您有 10 个可能的要求,每个要求 10 个课程,最坏的情况是 10x10 循环,10² 到计算机与没有相同根本。

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 215 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号