2017-10-09 153 views
-1

例如,我在绕过传递类作为变量时遇到了困难 - 例如 - 我正在考虑学校以及如何实现一个简单的系统来跟踪事物如作为变量传递一个类 - 学校示例 - Java

  • 学生
  • 教师
  • 主题

使得下列条件:

  • 一个学生需要主题
  • 教师教一个主题
  • 一个主题既有学生教师

每个类的一个基本的例子是如如下:

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; 
} 

Teacher.java

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操作的库存管理系统“,增加学生和教师对象等

任何指导将是伟大的!

+0

所以你想要另一个对象存储一个学生和老师的主题? – Dinh

+0

我对你的问题标题有点困惑。在班级或班级中,'class'是'class',如Java ['class'](https://docs.oracle.com/javase/8/docs/api/java/lang/Class)。 HTML)。 –

+0

我修改了我的问题,让'科目'而不是'班'@Dinh – physicsboy

回答

0

我认为Student.javaTeacher.java应该有Subject[] subjects而不是Subject subject。由于每个学生和老师都与许多主题相关,而不仅仅是一个。

+0

这是有道理的。 我也许正在想着在学科类 – physicsboy

+0

中有一个ArrayList/HashMap的学生/教师的相反方式,这取决于您的应用程序的用例。 **>会有很多学生。** **>会有很多老师,但少于学生。** **>将有更少的学科。** >>要更快地搜索学生,请将学生作为HashMap中的关键字,并让Teacher和Subject链接到学生。 >>要更快地搜索教师,请将教师作为HashMap中的关键字,并让学生和主题与教师链接。 >>主题相同。 – itch96

+0

不要使用数组([])使用[collections](https://docs.oracle.com/javase/tutorial/collections/)。 –

-1

在这种情况下,我不会推荐ArrayList,因为同一个对象可以在List中多次出现。您可以使用HashSet,在这种情况下,您需要在学生和教师课程中实施hashCodeequals。如果您实施Comparator<Student>Comparator<Teacher>,则还可以使用TreeSet。假设一个对象是由它的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 
} 
+0

我的科目中从来没有超过一位老师;) – Dinh

+0

@Dinh好的,我被一句话“一个学科既有学生也有教师”误导了。但在这种情况下,你只需要一张地图给学生。 –

+0

带有Integer'键的'HashMap'的用法是什么?一种偷偷摸摸的方式来提供独特性?如果这很重要,代码应该抛出异常,而不是默默继续。 –

0

也许这点你在正确的方向? 我不确定我是否完全理解你的问题,请让我知道这是你正在寻找的!

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); 
    } 
} 
+0

是的这看起来有点像我以前在其他人的代码中看到的。这是有道理的,你已经奠定了。感谢您的帮助:-) – physicsboy

+0

我假设如果我想要一个主题有超过1位老师(当然不是同时教,不要被带走),我会在这里实现第二个HashMap? ? – physicsboy

+0

准确地说,您会为该 – Dinh