继续我的Q:What's the best way to make this Java program?
我被建议在Lecturer类和Course类中存储一个列表。所以我做了,它看起来像这样:
public class Lecturer
{
private String id;
private String name;
List<Course> courses = new ArrayList<Course>(); // a list to hold the courses
public Lecturer(String idIn, String nameIn) // arguments of the constructor
{
id = idIn;
name = nameIn;
}
}
除了具有Lecturer列表之外,Course类也是如此。但是我得到的不仅仅是在那里放置一个列表呢?我不知道在哪里放置ArrayList的方法,比如添加和删除讲师?
有人可以解释一下这个目的吗?
我使用另一种方法,基本上将arraylists及其方法放在讲师和课程的两个单独的类中,然后我简单地添加到Course和Lecturer类作为属性,例如:
public class Lecturer
{
private String id;
private String name;
private CourseList courses; // COurseList is the class with the arraylist and methods
public Lecturer(String idIn, String nameIn) // arguments of the constructor
{
id = idIn;
name = nameIn;
courses = new CourseList();
}
}
我希望自己有意义,因为过去两周我一直坚持一件事似乎无法理解。
谢谢
答案 0 :(得分:1)
使用第一种方法,您需要公开允许客户端代码向这些列表添加内容的方法。所以,你可以:
public class Lecturer
{
List<Course> courses = new ArrayList<Course>(); // a list to hold the courses
public Lecturer(String idIn, String nameIn)
{
/* do stuff */
}
public void addCourse(Course newCourse)
{
this.courses.add(newCourse);
}
}
你可以为Course课做类似的事情。设置好后,您可以执行以下操作:
public static void main(String[] args)
{
Lecturer bob = new Lecturer(1, "Bob Smith");
Course math = new Course("Math 101");
// wire them together such that Bob teaches Math 101
bob.addCourse(math);
math.addLecturer(bob);
}
我认为这解决了你所要求的问题,但是这种双向循环关系有时候是一种糟糕设计的标志。但是,只有你知道你真正的任务是什么,所以我希望这会有所帮助!
答案 1 :(得分:0)
我建议使用Map<Lecturer, List<Course>>
,因为有人在上一个问题中回答,这意味着,“不同讲师之间的关联(Map
)(Lecturer
)到一个列表中相反,他们教授的课程(List<Course>
)将被实例化为
new HashMap<Lecturer, List<Course>>
。否则,为每个存储列表,您将复制功能。
一旦您宣布Course
c1, c2, ..., cn
Lecturer
l
个教授,您就可以将Map
m
与{{1}相关联其中m.put(l, c)
是课程的c
,声明为List
,并添加为new LinkedList<Course>()
。
如果我清楚地解释自己。
您可以阅读http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html和http://java.sun.com/docs/books/tutorial/collections/implementations/map.html以获取有关使用c.add(c1); c.add(c2); ... c.add(cn);
的更多帮助。
要获得反向关联,您可以轻松使用以下代码:
Map
其中,只要Collection<Course> courses = m.values();
Map<Course, List<Lecturer>> reverseAssociation = new HashMap<Course, List<Lecturer>>;
for (Course course : courses) {
List<Lecturer> lecturersTeachingCourse = new LinkedList<Lecturer>();
for (Lecturer lecturer : m.keySet()) {
if (lecturer.teaches(course)) {
lecturersTeachingCourse.add(lecturer);
}
}
coursesTaught.put(course, lecturersTeachingCourse);
}
询问讲师是否教授过去的课程,就将Lecturer.teaches(Course)
设置为课程 - 讲师协会。 (当然,您应该将该代码封装为Lecturers中的方法)。
祝你好运JavaNoob!我们都在那里!