2009-04-20 6 views
1

다음 Q 광산에서 : What's the best way to make this Java program?클래스에 ArrayList 추가하기 - 클래스는 어떤 역할을합니까?

강사 클래스 및 강좌 클래스에 목록을 저장하는 것이 좋습니다. 그래서 저는 이렇게했으며 다음과 같이 보입니다 :

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; 

    } 

} 

강사 목록을 제외하고는 수업과 동일합니다. 그러나 내가 얻지 못하는 것은 목록을 정확하게 배치하는 것입니다. 왜냐하면 나는 ArrayList의 메소드를 추가하거나 제거하는 것과 같이 어디에서 강사를 가져갈 지 모릅니다.

누군가이 목적을 설명 할 수 있습니까?

나는 기본적으로 강사 및 코스 두 개의 별도의 클래스에서 arraylists과 그 방법을 배치하는 다른 방법을 사용하고 단순히 속성 등으로 코스와 강사 클래스로 추가

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

} 

내가 이해할 수 있기를 바라는 지난 2 주간 한 가지 일에 매달려 있었다.

감사합니다

누군가가 "의미 이전 질문에 그들이 가르치는 과목의 목록에 다른 강사들 사이의 연결 ( Map) ( Lecturer)을 대답으로 나는, Map<Lecturer, List<Course>>를 사용하여 조언을 줄

답변

0

(List<Course>), 대신, 당신은, 그렇지. new HashMap<Lecturer, List<Course>>로 인스턴스를 각각의 목록을 저장하는 것이다, 당신이 복제됩니다 기능을 제공합니다.

당신이 Coursec1, c2, ..., cnLecturerl를 선언하면, 당신을 가르친다 Mapmm.put(l, c)으로 연결하십시오. 여기서 cList이며 new LinkedList<Course>()으로 표시되고 c.add(c1); c.add(c2); ... c.add(cn);으로 추가됩니다.

내가 분명히 설명하면.

Map을 사용하는 데 도움이 필요하면 http://java.sun.com/docs/books/tutorial/collections/interfaces/map.htmlhttp://java.sun.com/docs/books/tutorial/collections/implementations/map.html을 읽을 수 있습니다.

는 역 연결을 얻으려면, 당신은 쉽게 다음 코드를 사용할 수 있습니다

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

강사는 교육 과정 - 강사 협회로 reverseAssociation을 설정하고, 전달 과정을 가르치는 한 Lecturer.teaches(Course) 같은 쿼리 여부를 어느. (당연히, 강사의 메소드로 그 코드를 캡슐화해야합니다.)

행운을 빕니다 JavaNoob! 우리는 한 번 모두 거기에 있었다!

+0

강사리스트가 없어야하나요? 코스를 가르치는 강사 목록을 볼 수 있어야합니다. 답장을 보내 주셔서 감사합니다 –

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

내가 그건 당신이 요청하지만,이 2 웨이가 발생하는 것을 해결한다 생각, 원형의 관계는 때로는 나쁜 디자인의 표시이다. 그래도 너는 네가 진짜 임무가 뭔지 안다. 그래서 나는 이것이 도움이되기를 바란다!

+0

답장을 보내 주셔서 감사합니다. 이미 비슷한 점이 있지만 작동에 문제가 없지만 아무도 제가 말한 것을 이해하지 못한 것 같습니다. http :// /stackoverflow.com/questions/765937/how-do-allocate-something-to-an-object-in-a-arraylist –