XML ファイルで SAX パーサーを使用して、相互に参照するオブジェクトを作成しています。
<?xml version="1.0"?>
<xml encoding="UTF-8" version="1.0">
<course number="CSC212">
<textbook name="BookFor212"/>
</course>
<course number="CSC241">
<prereq number="CSC212"/>
<textbook name="BookFor241"/>
<textbook name="AnotherBookFor241"/>
</course>
<course number="CSC455">
<prereq number="CSC241"/>
<prereq number="CSC365"/>
<textbook name="BookFor455"/>
</course>
<course number="CSC365">
<prereq number="CSC241"/>
<textbook name="BookFor365"/>
<textbook name="AnotherBookFor365"/>
<textbook name="YetAnotherBookFor365"/>
</course>
</xml>
そこで、コースを作成し、教科書と前提条件をコース内のそれぞれの配列に追加し、最後にそのコースを配列に追加します。解析後、ユーザーはコース番号を入力するように求められ、プログラムは前提条件とそれに伴うすべての情報を含む情報を吐き出します。したがって、教科書と前提条件も同様です。
public class Course {
private String number;
private Course[] prereqs = new Course[5];
private int pCounter = 0;
private Textbook[] books = new Textbook[5];
private int tCounter = 0;
public Course(String n) {
number = n;
}
public String getNumber() {
return number;
}
public void addPrereq(Course prereq) {
prereqs[pCounter++] = prereq;
}
public void addTextbook(Textbook book) {
books[tCounter++] = book;
}
public String toString() {
String retVal = "Course: " + number + (tCounter == 0 ? ", No books." : ", textbooks: ");
for (int i = 0; i < tCounter; i++)
retVal += books[i].toString() + " ";
retVal += "\n" + (pCounter == 0 ? "No prerequisites.\n" : "Prerequisites:\n");
for (int i = 0; i < pCounter; i++)
retVal += prereqs[i].toString();
return retVal + "End of course " + number + ".\n";
}
}
問題は、前提条件を追加するときに、既に作成されたコースの配列を調べて、そこにある場合はそれを使用し、ない場合は新しいコースを作成することです。そこにない場合は、番号以外の情報がないコースを追加します。したがって、コース CSC455 には前提条件 CSC365 がありますが、教科書や前提条件はリストされていません。前提条件が完成したコースになるようにするにはどうすればよいですか?