我想使用递归函数来实现一些东西,包括打印输出。我想在打印的输出中增加标签级别。我能够使用以下方法成功实现这一目标
int count =0;
public void m1 (Object n)
{
count++;
List nl = n.getChildren();
int nlsize = nl.size();
for (int i = 0 ; i < nlsize ; i++)
{
String objName = nl.getObjAt(i).getText();
for (int tab=0; tab<count ; tab++) {System.out.print("\t");}
System.out.println(objName);
m1(nl.getObjAt(i));
}
count--;
}
但是这种方法的局限性和问题,即外部计数的初始化,是非常明显的。
有没有办法实现这个目标?我知道java不接受传递的参数的默认值,否则这可能是一个可能的解决方案。如何实现这一目标呢?
答案 0 :(得分:7)
我会把它分成两个方法:一个只有“自然”参数的公共方法,一个带有两个参数的私有方法(在这种情况下是n
和count
),传入初始值值。您无需在方法中修改count
- 只需在递归调用中传递count + 1
:
public void m1(Object n) {
m1(n, 0);
}
private void m1(Object n, int count) {
List nl = n.getChildren();
int nlsize = nl.size();
for (int i = 0; i < nlsize; i++) {
String objName = nl.getObjAt(i).getText();
for (int tab = 0; tab < count; tab++) {
System.out.print("\t");
}
System.out.println(objName);
m1(nl.getObjAt(i), count + 1);
}
}
请注意,这是从最外层的 no 标签开始,而原始代码使用一个标签。如果您愿意,可以传递1
而不是0
。
(我也会在那里重命名所有。名字非常重要 - 花一些时间挑选好的!)