[英]Using two different objects of the same type in different classes in Java
我正在用Java編寫一個程序,該程序應該像一個學生管理部門,其中包含不同的學生,學科,教師等列表。 該計划除其他外,應包括一個普通主題列表和每個學生一個主題列表。 問題在於,當我創建兩個不同的主題並將其添加到常規主題列表中,然后找到其中一個並將其添加到學生主題列表中時,學生主題列表將同時包含這兩個主題。
我已經在網上搜索過,但要查找要知道的內容並不容易!
我自己在寫數據結構。
我的代碼如下所示:
public class Subject() {
Subject next;
//constructor with parameters
}
public class Subjectlist() {
private Subject first;
//methods for adding to list, deleting, find and so on
}
public class Participation {
Subjectlist subjects;
public Participation() {
subjects = new Subjectlist();
}
}
public class Student() {
Participation participation;
public Student(paramters) {
participation = new Participation();
}
public class mainclass() {
public static void main(String [] args) {
Subjectlist subjectlist = new Subjectlist();
Studentlist students = new Studentlist();
Student student = new Student(parameters);
students.addToList(student);
Subject subject1 = new Subject(parameters);
Subject subject2 = new Subject(parameters);
subjectlist.addToList(subject1);
subjectlist.addToList(subject2);
Subject subject = subjectlist.find(subjectid); //Finds the subject with an ID given in the constructor
student.participation.subjects.addToList(subject);
//Now student.participation.subjects contains both subject1 and subject2
}
}
任何幫助將非常感激!
編輯:
這是find和addToList方法:
public String addToList(Subject new) {
Subject pointer = first; //Subject first is declared in the class
if(new == null) {
return "The subject was not added.";
}
else if (first == null) {
first = new;
return "The subject was added";
}
else {
while ( pointer.next != null )
pointer = pointer.next;
pointer.next = new;
return "The subject was added";
}
}
public Subject find(String subjectid) {
Subject found = null;
Subject pointer = first;
while (pointer != null) {
if (pointer.getSubjectID().equals(subjectid)) {
found = pointer;
}
pointer = pointer.next;
}
return found;
}
我們確實需要其余代碼來真正確認問題所在,但是從您發布的內容來看,我會做出有根據的猜測:
在實現自己的鏈接列表時,該實現已泄漏到Subject類:
public class Subject() {
Subject next;
//constructor with parameters
}
此處-您創建的任何Subject實例,如果它是列表的一部分,它將包含對Linked列表中下一項的引用。
例如,在您發布的代碼中:
Subject subject1 = new Subject(parameters);
Subject subject2 = new Subject(parameters);
subjectlist.addToList(subject1);
subjectlist.addToList(subject2);
我假設要使您的鏈表實現正常工作, SubjectList
first
變量指向subject1
,然后subject1
的next
變量指向subject2
。
當您嘗試在任何其他列表中使用subject1
時,這會導致明顯的問題,因為它仍然保留對subject2
的引用。
如果確實需要為特定項目創建自己的LinkedList實現,則可以創建一個包裝器類,該類具有下一個變量和對Subject的引用-這樣,LinkedList實現不會泄漏到根本的對象。
例如:
public class SubjectWrapper {
Subject subject;
SubjectWrapper next;
//constructor with parameters
}
您無需公開此基礎抽象,仍然將subject1
傳遞給addToList
方法,但在該方法中,請將其粘貼在包裝類中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.