こんにちは、コンポーネントとコンポジットを含むことができるコンポーネントクラスを持っています。コンポーネントのすべての税金の合計を計算するメソッドを記述しています。このクラスは複合パターンコードの一部です。問題は再帰的な私のメソッドは正常に動作していません私はスタックのオーバーフローがありますが、私のメソッドをテストするために私は2つのオブジェクトを私の配列のリストに持っています。コンポジットパターンの再帰メソッド
public class Nobles extends RiruritaniaSubjects
{
ArrayList vassalsanddukes = new ArrayList();
public void calculateTaxDueByComponents(){
Iterator iterator = vassalsanddukes.iterator();
while(iterator.hasNext()){
RiruritaniaSubjects vassalandduke=(RiruritaniaSubjects) iterator.next();
totalTaxdue+=vassalandduke.getTaxDue();
calculateTaxDueByComponents();
}
}
}
RiruritaniaSubjectsは抽象クラスであり、私は私の他の複合クラスはit.Iが停止したコードと、スタックオーバーフローを編集しましたが、私の他の問題が原因コンポーネントがあれば、税に追加しないように思われるで拡張していコンポーネントを含んでいます。私は、高貴A高貴Bを持っているなどのためである私は、iはC高貴追加高貴c.Ifそして、私が今持っています私のcode.The問題のさまざまな部分のスニペットを投稿することを決定した
public void calculateTaxDueByComponents(){
Iterator iterator = vassalsanddukes.iterator();
while(iterator.hasNext()){
RiruritaniaSubjects vassalandduke=(RiruritaniaSubjects) iterator.next();
totalTaxdue+=vassalandduke.getTaxDue();
vassalandduke.calculateTaxDueByComponents();
}
}
貴族b b.add(C)。私はbをa、a.add(B)に追加します。私の計算Totaltaxdue()は内部貴族cのために税金を更新していません。
パブリッククラスNobles extends RiruritaniaSubjects { ArrayList vassalsanddukes = new ArrayList();それは、各貴族のために3.5でなければなりませんので、私自身の働きによって
public void calculateTaxDueByComponents(){
Iterator iterator = vassalsanddukes.iterator();
while(iterator.hasNext()){
RiruritaniaSubjects vassalandduke=(RiruritaniaSubjects) iterator.next();
totalTaxdue+=vassalandduke.getTaxDue();
System.out.println(vassalandduke.getTaxDue());
vassalandduke.calculateTaxDueByComponents();
}
}
public double getTotalTaxDue(){
calculateTaxDueByComponents();
return totalTaxdue;
}
public class Prince {
Land land;
ArrayList allprinceSubjects = new ArrayList();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
RiruritaniaSubjects allsubjects = new Nobles();
RiruritaniaSubjects allsubject3 = new Nobles();
RiruritaniaSubjects allsubject4 = new Nobles();
allsubject4.add(allsubject3, 10);
allsubjects.add(allsubject4, 10);
System.out.println(allsubjects.getTotalTaxDue());
}
}
出力は7でなければなりませんが、私は間違っている出力として3.5を取得しています。
宿題の場合は、宿題タグを追加してください。 –
しかし、毎回新しいイテレータが得られます。あなたは決して反復することはありません。あなたはあなたのマシンが転倒するまで、最初のものを何度も何度もやります。あなたは何をしようとしているのですか?反復するか反復するかのどちらかを行います。 –
私はオブジェクトを含む配列リストを持っているので、私は各オブジェクトを通過する必要があるので、反復する必要があります –