2012-01-13 240 views
3

我有一個數組列表,可能包含組件或複合材料,每個組件或複合材料都有一個稅收字段,我希望獲取該值。此方法的目的是獲取所有組件而在陣列list.A部件複合材料還可以包含複合。問題是,當一個組件包含複合,我的方法不會在複合遞歸方法

ArrayList allprinceSubjects = new ArrayList(); 
public double calculateTaxDueByComponents(){ 
    double totaltaxdue=0; 
    Iterator iterator = vassalsanddukes.iterator(); 
    while(iterator.hasNext()){ 
     RiruritaniaSubjects vassalandduke=(RiruritaniaSubjects) iterator.next(); 
     totaltaxdue+=vassalandduke.getTaxDue(); 
     vassalandduke.calculateTaxDueByComponents(); 


    } 
    return totaltaxdue; 
} 
+0

其他人已經回答了,但到底是什麼'getTaxDue()'做什麼?將邏輯從'calculateTaxDueByComponents'移動到'getTaxDue'並且只有一個方法似乎更有意義。或者至少在'getTaxDue'中調用'calculateTaxDueByComponents',這樣你就不需要每次都明確地做兩件事情。 – Groo 2012-01-13 11:31:31

回答

3

不知道如何使你的業務邏輯實現的,但我覺得有以下行需要改變:

vassalandduke.calculateTaxDueByComponents(); 

將其更改爲:

totaltaxdue += vassalandduke.calculateTaxDueByComponents(); 
7

問題得到價值在於,當你打電話calculateTaxDueByComponents()遞歸地,您放棄結果:

vassalandduke.calculateTaxDueByComponents(); 

改變,要

totaltaxdue += vassalandduke.calculateTaxDueByComponents(); 
+0

+1在**'totaltaxdue'增加後調用'vassalandduke.calculateTaxDueByComponents();'**是沒有意義的。 – Groo 2012-01-13 11:28:28

+0

THANKs解決了我的問題,我將不得不重新學習遞歸,學習遞歸的最佳途徑的任何提示 – 2012-01-13 11:30:32

+0

@Jackwelch:您的問題與遞歸沒有任何關係,但是正確安排了語句。 – Groo 2012-01-13 11:35:40

1

你」不要將vassalandduke.calculateTaxDueByComponents();的值分配給任何東西 - 您應該最有可能將其添加到totaltaxdue,而不是這樣?

0

在下面的totaltaxdue中存儲方法的返回值。

totaltaxdue += vassalandduke.calculateTaxDueByComponents();

+0

不是一個好主意。這將增加每次調用該方法的價值。 – Groo 2012-01-13 11:37:46