我在对象ArrayList<Student>
中创建了一个StudentList list1
,saving[Serialization]
是name,id,age,gpa,etc
的学生信息(list1
),以便list1[0] = 1st student's info
1}},然后是list1[1] = 2nd student's info
,依此类推。
对象ArrayList<Subject>
中的新SubjectList list2
也适用于索引0示例list2[0]=(java,math,etc)
[第一个学生] [{1}} [第二个学生]保存的学生的所有主题在文件中。
我想要在学生信息旁边添加主题:
list1 index [0] =第一个学生信息,索引[1] =第一个学生的科目 index [2] =第一个学生信息,索引[3] =第一个学生的主题。
我遇到了这个简单的问题。请帮助。
list2[1]=(c++,english,etc)
我只是不能正确,假设添加主题`s.addSubject(s.new主题
(“OOP”,“007”));`给学生珍妮。
输出应该是:
[姓名:史密斯ID:1性别:M CGPA:3
,姓名:Jenny ID:2性别:F CGPA:4
,姓名:Roger ID:3性别:M CGPA:2]
Not Found0
,招致:
[姓名:Jenny ID:2性别:F CGPA:4] [课程:OOP,代码:007]
Not Found2
[姓名:史密斯ID:1性别:M CGPA:3
,姓名:Jenny ID:2性别:F CGPA:4 [课程:OOP,代码:007]
,姓名:Roger ID:3性别:M CGPA:2]
答案 0 :(得分:3)
我认为你有两个不同的问题。
您的第一个问题:
第一个是您有一个列表,并且您希望在该列表中放置不同的对象(学生对象和主题对象)。您可以通过两种不同的方式完成此操作。第一种方法是将列表简单地与对象一起使用:List<Object> list = new ArrayList<Object>();
之后,您可以将所有内容添加到列表中,但您还必须投射所有内容 - 这不是一个好的解决方案。第二个更好的解决方案是为两个对象提供通用接口。例如,您的类实现的名为IInformation
的东西。但是很难为学生对象和主题对象找到合适的界面。但那是你的创造力问题。
您的第二个问题:
现在你的第二个问题。我认为你的设计,架构或你想做的方式是错误的。你有什么问题?为什么要将信息放在学生背后的列表中?这有充分的理由吗?我认为有更好的解决方案。例如,您的学生对象可以保存主题信息。这是合乎逻辑的。我作为一名学生知道我正在学习的科目。另一种方法是创建第三个对象,该对象包含学生和主题之间的映射(即关系):
class Relation {
private Student student;
private Subject subject;
}
然后,您可以将此类对象存储在列表中。
答案 1 :(得分:2)
我认为你应该采取的方法类似于:
class Student{
private String name, ID;
private int gpa, age;
//More personalia stuff...
private ArrayList<Subject> subjects;
public void addSubject (Subject new_subject) { subjects.add(new_subject); }
public void addSubjects (List <Subject> subjects_list) {
for (Subject s : subjects_list) addSubject(s);
}
//Getters
public int getGPA() { return gpa; }
public int getAge() { return age; }
public String getName() { return name; }
//.. More personalia getters
//Setters
public void setGPA(int new_gpa) { gpa = new_gpa; }
}
class Subject {
String description;
String ID;
}
现在,如果您有一份学生名单,请说:
ArrayList <Student> all_students;
在这里,您可以浏览列表并将主题添加到其中任何一个或全部。
编辑:添加了一些getter和setter,使您更清楚地访问对象信息。
编辑2以解决您更新的帖子: 您的代码存在许多问题。让我们从最高级别的东西到低级(与重要性不一样),
1)班级名称
一个类不应该被称为“主”。目前还不清楚这门课是什么。相反,称之为它:学生主体 - 注册系统。 class StudentRegister
应该没问题。
2)课程内容
您在Subject
中将班级Student
包含为内部班级。这是没有意义的,因为主题不是学生的一部分(在现实生活中的字面意义上)。尽管如此,这不是最糟糕的部分;将Subject
作为内部课程将使您为每个学生创建相同科目的大量内容。这完全是多余的。
现在,您还列出了每个Student对象中所有学生的列表。这是故意的吗?如果是这样,似乎有点误导。学生A
不需要,也可能永远不会知道所有其他学生。更不用说,每次添加新学生N时,您都需要将N
添加到当前存在的所有学生对象中。这也是多余的。
建议的解决方案
让我们考虑一下你对学生的了解。你知道的:
请注意,作为学生,您无法控制课程说明和ID
所有这些私人变量都是私密的,因为这些是您作为学生应某人要求披露的内容。它类似于有人问你“你叫什么名字?”或者“你的年龄是多少?”这是您通过实施getName()
,getAge()
等
现在让我们考虑斜体的部分。当有人询问您正在参加哪些课程时,您只需参考您和其他在大学注册的学生共同的课程列表。你没有创建自己的课程,没有其他人知道。因此,学科不应该是学生班级的内部班级。相反,它是大学提供的课程对象的参考(即指针)(继续阅读以获得进一步的解释)
现在考虑一个课程对象。该课程对象不需要了解:
任何给定的课程对象都需要知道:
最后,在您的StudentRegistry
课程中,您现在应该有两个列表:
- 在大学注册的学生名单:List <Student> all_students;
- 提供的所有科目/课程列表:`列出all_subjects;
请记住,每个学生都有添加科目的方法吗?您只需参考studentRegistry中存在的课程对象,并要求每个学生将这些对象添加到他们的主题列表中。 不会创建新的主题对象。每个学生的学习计划中的任何和所有主题都将引用StudentRegistry类中包含的all_subjects
列表中的对象
答案 2 :(得分:0)
您可以使用List类的add方法,该方法也采用索引。