将类作为变量传递-学校示例-Java

将类作为变量传递-学校示例-Java,java,Java,例如,我很难理解如何将课堂作为变量进行传递——我正在考虑一所学校,以及如何实现一个简单的系统来跟踪诸如 学生 教师 科目 以确保以下情况属实: 学生学习一门学科 教师教授一门学科 一门学科既有学生也有教师 每个类别的基本示例如下: Student.java private String name; private int age; private Subject subject; private String school; // Can implement another class

例如,我很难理解如何将课堂作为变量进行传递——我正在考虑一所学校,以及如何实现一个简单的系统来跟踪诸如

  • 学生
  • 教师
  • 科目
以确保以下情况属实:

  • 学生学习一门学科
  • 教师教授一门学科
  • 一门学科既有学生也有教师
每个类别的基本示例如下:

Student.java

private String name;
private int age;
private Subject subject;
private String school; // Can implement another class of School later

public Student(int id, String name, int age, String school, String course) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.school = school;
    this.course = subject;
}
private String name;
private Subject subjectTaught;
private Date taughtSince; // Date is another thing that perplexes me, but that can be saved for another time
private int holidaysRemaining;

public Teacher(int id, String name, Subject subjectTaught, String taughtSince, int holidaysRemaining) {
    this.id = id;
    this.name = name;
    this.subjectTaught = subjectTaught;
    this.taughtSince = taughtSince;
    this.holidaysRemaining = holidaysRemaining;
}
Teacher.java

private String name;
private int age;
private Subject subject;
private String school; // Can implement another class of School later

public Student(int id, String name, int age, String school, String course) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.school = school;
    this.course = subject;
}
private String name;
private Subject subjectTaught;
private Date taughtSince; // Date is another thing that perplexes me, but that can be saved for another time
private int holidaysRemaining;

public Teacher(int id, String name, Subject subjectTaught, String taughtSince, int holidaysRemaining) {
    this.id = id;
    this.name = name;
    this.subjectTaught = subjectTaught;
    this.taughtSince = taughtSince;
    this.holidaysRemaining = holidaysRemaining;
}
主题

String name;
int length;
Teacher teacher;
Student student;

public Subject(int id, String name, int length, Teacher teacher, Student student) {
    this.id = id;
    this.name = name;
    this.length = length;
    this.teacher = teacher;
    this.student = student;
}
我知道我可以在主题中实现ArrayList或HashMap,以跟踪哪些学生正在学习哪些科目等

我只是有点迷茫,当它涉及到实际获得代码,使事情发生

最终的结果将是为CRUD操作建立某种“库存管理系统”,将学生和教师添加到科目中等


任何指导都会很好

我认为
Student.java
Teacher.java
应该有
Subject[/code>科目,而不是
Subject-Subject
。因为每个学生和老师都与许多主题相关,而不仅仅是一个主题。

在这种情况下,我不建议使用
数组列表
,因为同一个对象可以在
列表中多次出现。您可以使用
HashSet
,在这种情况下,您需要在学生和教师课堂上实现
hashCode
equals
。如果实现了
比较器
比较器
,也可以使用
树集
。假设对象由其id字段标识,您也可以使用
HashMap

class Subject {
    String name;
    int length;
    private final Map<Integer,Teacher> teachers = new HashMap<>();
    private final Map<Integer,Student> students = new HashMap<>();

    public Subject(int id, String name, int length) {
        this.id = id;
        this.name = name;
        this.length = length;
    }

    public void addTeacher(Teacher teacher) {
        teachers.put(teacher.getId(), teacher);
    }

    public void removeTeacher(Teacher teacher) {
        teachers.remove(teacher.getId());
    }

    public Teacher[] getTeachers() {
        return teachers.values().toArray(new Teacher[teachers.size()]);
    }

    // ... same for students
}
课程主题{
字符串名;
整数长度;
私有最终映射教师=新HashMap();
private final Map students=新HashMap();
公共主题(整数id、字符串名称、整数长度){
this.id=id;
this.name=名称;
这个长度=长度;
}
公共教师(教师){
teachers.put(teacher.getId(),teacher);
}
公共无效移除教师(教师){
删除(teacher.getId());
}
公共教师[]获取教师(){
返回teachers.values().toArray(新教师[teachers.size()]);
}
//…学生也一样
}

也许这为您指明了正确的方向? 我不确定我是否完全理解你的问题,请让我知道这是否是你所寻找的

public class School {

    private String name;
    private Map<String, Subject> subjects = new HashMap<>();

    public School(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void addSubject(Subject subject) {
        subjects.add(subject.name, subject);
    }

    public Subject getSubject(String name) {
        return subjects.get(name);
    }
}

public class Subject {

    Map<String, Student> students = new HashMap<>();
    String name;
    int length;
    Teacher teacher;

    public Subject(int id, String name, int length, Teacher teacher) {
        this.id = id;
        this.name = name;
        this.length = length;
        this.teacher = teacher;
    }

    public void addStudent(Student student) {
        students.add(student.name, student);
    }

    public void getStudent(String name) {
        students.get(name);
    }
}
公立学校{
私有字符串名称;
私有映射主题=新HashMap();
公立学校(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公共科目(科目){
subject.add(subject.name,subject);
}
公共主题getSubject(字符串名称){
返回subjects.get(name);
}
}
公共课科目{
Map students=newhashmap();
字符串名;
整数长度;
教师;
公共主题(整数id、字符串名称、整数长度、教师){
this.id=id;
this.name=名称;
这个长度=长度;
这个老师=老师;
}
公立学校学生(学生){
添加(student.name,student);
}
public void getStudent(字符串名称){
学生。获取(姓名);
}
}

那么你想要另一个存储有学生和老师的主题的对象吗?我对你的问题标题有点困惑。“课堂”是学校课堂上的“课堂”还是Java课堂上的“课堂”。我修改了我的问题,改为“科目”而不是“课堂”@Dinh“一个学生选修一门科目”这是一个幸运的学生,我以前选修过多门科目。你们的老师也一样。请阅读并思考。“提供一些指导”在这里是一个太宽泛的问题。这是有道理的。我的想法可能与此相反,根据您的应用程序的用例,在课程中设置学生/教师的ArrayList/HashMap将会有很多学生。>教师会很多,但学生会少。>主题数量将减少。>>要更快地搜索学生,请将该学生作为HashMap中的键,并将教师和科目链接到该学生。>>要更快地搜索教师,请将教师作为HashMap中的键,并将学生和主题链接到教师。>>主题也是一样。不要使用数组([])使用。谢谢@itch96的建议,我会看看我能让它工作的最佳方式。我不打算一开始就有几千张唱片,我想每一张只有几张。@Dinh好吧,我被“一门学科既有学生也有老师”这句话误导了。但是在这种情况下,你只需要给学生一个映射。带
整数
键的
HashMap
有什么用?提供独特性的秘密方式?如果这很重要的话,代码应该抛出一个异常,而不是无声地继续。@Dinh-你从来没有一节课被另一位老师教过,而不是你平时的课#隐私:-P谢谢你的建议MauricePerryYes这看起来有点像我过去在别人的代码中看到的。你如何安排它是有道理的。感谢您的帮助:-)我假设如果我想让一个科目有一个以上的教师(当然不是同时教学,不要忘乎所以),我也会在这里实现第二个HashMap??确切地说,如果我在实现my School.java,为教师、学生和科目提供地图,您会为此添加另一个地图,但是我的Subject.java也有老师和学生的地图。。。我可以在BaseEntity.java类中保存它,并将它们扩展到这些类中,以便它们在