簡體   English   中英

在Java中的不同類中使用相同類型的兩個不同對象

[英]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 ,然后subject1next變量指向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM