我想使用递归函数来实现一些东西,包括打印输出.我想在打印的输出中增加标签级别.我能够使用以下方法成功实现这一目标
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--;
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法的局限性和问题,即外部计数的初始化,是非常明显的.
有没有办法实现这个目标?我知道java不接受传递的参数的默认值,否则这可能是一个可能的解决方案.如何实现这一目标呢?
我将它拆分成两个方法:一个公众一个刚好在"自然"的参数,并用两个参数(在这种情况下,一个私单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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这开始时最外层没有选项卡,而原始代码使用一个选项卡.如果你愿意,你可以通过1而不是通过0.
(我也会重命名那里的一切.名字非常重要 - 花一些时间挑选好的!)