gpt4 book ai didi

java - 在Java中的不同类中使用相同类型的两个不同对象

转载 作者:行者123 更新时间:2023-12-01 23:50:23 27 4
gpt4 key购买 nike

我正在用Java编写一个程序,它应该像一个学生管理系统,有不同的学生、科目、教师等列表。除其他外,该计划应包括一份一般科目列表和一份针对每个学生的科目列表。问题是,当我创建两个不同的科目并将其添加到一般科目列表中,然后找到其中一个科目并将其添加到学生科目列表中时,学生科目列表包含这两个科目。 p>

我已经在网上搜索过,但要知道要查找什么并不容易!

我正在自己编写数据结构。

我的代码看起来像这样:

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

最佳答案

我们确实需要其余的代码来真正确认问题所在,但根据您发布的内容,我将做出有根据的猜测:

当您实现自己的链接列表时,该实现已泄漏到主题类:

public class Subject() {
Subject next;
//constructor with parameters
}

此处 - 您创建的主题的任何实例,如果它是列表的一部分,它将保存对链接列表中下一项的引用。

例如,在您发布的代码中:

Subject subject1 = new Subject(parameters);
Subject subject2 = new Subject(parameters);

subjectlist.addToList(subject1);
subjectlist.addToList(subject2);

我假设要使您的链表实现正常工作,SubjectList first 变量指向 subject1,然后指向 subject1 s next 变量指向 subject2

当您尝试在任何其他列表中使用 subject1 时,这会导致明显的问题,因为它仍然保留对 subject2 的引用。

如果您确实/需要为特定项目创建自己的 LinkedList 实现,那么您可以创建一个包装类,它具有下一个变量和对主题的引用 - 这样,LinkedList 实现就不会完全泄漏到底层对象。

例如像这样:

public class SubjectWrapper {
Subject subject;
SubjectWrapper next;
//constructor with parameters
}

您不需要公开此底层抽象,并且仍然将 subject1 传递给 addToList 方法,但在该方法中将其粘贴在包装类中。

关于java - 在Java中的不同类中使用相同类型的两个不同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16386820/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com