在Java的不同类中使用相同类型的两个不同对象
我正在用Java编写一个程序,它应该像一个学生管理系统,包含不同的学生、科目、教师等列表。除其他外,该课程应包括一个一般科目表和每个学生一个科目表。问题是,当我创建两个不同的主题并将其添加到常规主题列表中,然后找到其中一个并将其添加到学生主题列表中时,学生主题列表包含这两个主题 我已经在网上搜索过了,但要知道要找什么并不容易 我自己在写数据结构 我的代码如下所示:在Java的不同类中使用相同类型的两个不同对象,java,list,Java,List,我正在用Java编写一个程序,它应该像一个学生管理系统,包含不同的学生、科目、教师等列表。除其他外,该课程应包括一个一般科目表和每个学生一个科目表。问题是,当我创建两个不同的主题并将其添加到常规主题列表中,然后找到其中一个并将其添加到学生主题列表中时,学生主题列表包含这两个主题 我已经在网上搜索过了,但要知道要找什么并不容易 我自己在写数据结构 我的代码如下所示: public class Subject() { Subject next; //constructor with
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 subject1 = new Subject(parameters);
Subject subject2 = new Subject(parameters);
subjectlist.addToList(subject1);
subjectlist.addToList(subject2);
我假设要使链表实现正常工作,SubjectList
变量首先指向subject1
,然后subject1
s下一个变量指向subject2
当您尝试在任何其他列表中显示subject1
时,这会导致明显的问题,因为它仍然包含对subject2
的引用
如果您确实需要为特定项目创建自己的LinkedList实现,那么您可以创建一个包装类,该类包含下一个变量和对Subject的引用—这样,LinkedList实现就不会泄漏到底层对象
e、 g.类似于:
public class SubjectWrapper {
Subject subject;
SubjectWrapper next;
//constructor with parameters
}
您不需要公开这个底层抽象,仍然将subject1
传递给addToList
方法,但在该方法中,将其粘贴到包装类中。我们确实需要代码的其余部分来真正确认问题所在,但是根据您发布的内容,我将进行一个有根据的猜测:
在您实现自己的链表时,该实现已泄漏到Subject类:
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
变量首先指向subject1
,然后subject1
s下一个变量指向subject2
当您尝试在任何其他列表中显示subject1
时,这会导致明显的问题,因为它仍然包含对subject2
的引用
如果您确实需要为特定项目创建自己的LinkedList实现,那么您可以创建一个包装类,该类包含下一个变量和对Subject的引用—这样,LinkedList实现就不会泄漏到底层对象
e、 g.类似于:
public class SubjectWrapper {
Subject subject;
SubjectWrapper next;
//constructor with parameters
}
您不需要公开这个底层抽象,仍然将subject1
传递给addToList
方法,但在方法中,将其粘贴到包装类中。addToList中可能有错误,请查找。。。但是,这些没有显示。。无论如何,这似乎是一个相当无聊的任务。不知何故,似乎你实际上没有任何列表
。。。我希望看到这样一种结构。但是也许你应该把问题简化成一个较短的版本,然后发布这个浓缩问题的完整代码。@luksch当然没有——(s)他正在“编写数据结构h(im | er)self”。这是一个链表,显示在发布的代码中。@camilla您应该明确地发布代码,显示您如何得出列表包含两个主题的结论。如果这种列表实现不是您需求的一部分,我认为您可以使用ArrayList,这可能会简化您的问题。也许addToList和find中有错误。。。但是,这些没有显示。。无论如何,这似乎是一个相当无聊的任务。不知何故,似乎你实际上没有任何列表
。。。我希望看到这样一种结构。但是也许你应该把问题简化成一个较短的版本,然后发布这个浓缩问题的完整代码。@luksch当然没有——(s)他正在“编写数据结构h(im | er)self”。这是一个链表,显示在发布的代码中。@camilla您应该明确地发布代码,显示您如何得出列表包含两个主题的结论。如果这种列表实现不是您需求的一部分,我认为您可以使用ArrayList,这可能会简化您的问题。我现在添加了addToList和find方法,但您描述的似乎就是问题所在!我将尝试创建一个包装器类。非常感谢您抽出时间!是的,那是你的问题。您可以通过添加一个clone()
方法来修复它,该方法返回主题的新实例。您应该只复制您的值,除了。下一个引用。@System.exit我会查看它!谢谢你抽出时间!我现在添加了addToList和find方法,但您所描述的似乎就是问题所在!我将尝试创建一个包装器类。非常感谢您抽出时间!是的,那是你的问题。您可以通过添加一个clone()
方法来修复它,该方法返回主题的新实例。您应该只复制您的值,除了。下一个引用。@System.exit我会查看它!谢谢你