1

私のこの Q に続いて:この Java プログラムを作成する最良の方法は何ですか?

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;

    }

}

講師リストがあることを除いて、コースクラスについても同じです。しかし、私が得られないのは、そこにリストを配置すると正確に何をするのですか? cos講師の追加や削除などのArrayListのメソッドをどこに置くべきかわかりませんか?

誰かがこれの目的を説明できますか?

基本的に配列リストとそのメソッドを講師とコースの 2 つの別々のクラスに配置する別の方法を使用してから、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();
    }

}

私が理にかなっているといいのですが、過去2週間、誰も理解していないように見える1つのことに行き詰まっていました.

ありがとうございました

4

2 に答える 2

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

それはあなたが求めていることを解決すると思いますが、この双方向の循環関係を持つことは、悪い設計の兆候である場合があります。ただし、実際の割り当てが何であるかを知っているのはあなただけなので、これが役立つことを願っています!

于 2009-04-20T19:20:40.537 に答える
0

Map<Lecturer, List<Course>>前の質問で誰かが答えたように、を使用することをお勧め しMapます.それぞれのリストを作成すると、機能が複製されます。LecturerList<Course>new HashMap<Lecturer, List<Course>>

a が教えてCourseいることを宣言したら、コースの as でそれらを関連付け、 as として宣言し、asとして追加します。c1, c2, ..., cnLecturer lMap mm.put(l, c)cListnew LinkedList<Course>()c.add(c1); c.add(c2); ... c.add(cn);

私が自分自身を明確に説明する場合。

http://java.sun.com/docs/books/tutorial/collections/interfaces/map.htmlおよびhttp://java.sun.com/docs/books/tutorial/collections/implementations/map.htmlを読むことができますMaps の使用に関する詳細については、

逆の関連付けを取得するには、次のコードを簡単に使用できます。

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)講師が合格したコースを教えるかどうかを問い合わせる限りreverseAssociation、コースと講師の関連付けとして設定されます。(当然、そのコードを講師のメソッドとしてカプセル化する必要があります)。

がんばれ JavaNoob! 私たちは一度そこにいました!

于 2009-04-20T19:16:16.723 に答える