2017-10-09 56 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