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