2012-01-13 176 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