[英]Finding an object recursively, returns null when found
我已经创建了一个通过名称查找jcomponents的递归方法。 此方法查找正确的组件,但它返回null
。 我猜我没有正确处理组件的返回和返回null。 我怎样才能正常工作?
编辑:改为,我从下面的评论中理解。 但它不会返回组件。
public Component findComponent(String str, Component tt){
for (Component c : ((Container) tt).getComponents()) {
System.out.println("name: " + c.getName());
if(c.getName().equals(str)){
System.out.println("Found it! " + c.getName());
return c;
} else {
return findComponent(str, c);
}
}
return null;
}
这将立即停止。 有一个Component
没有Components
所以我猜它会立即停止并返回null?
如果我从findComponent(str, c);
删除return
findComponent(str, c);
控制台给出:
name: titel
name: l
name: jpj
name: jtx
name: jpath
Found it! jpath
name: knapper
name: k1
name: n1
name: k2
name: n2
name: k3
name: n3
name: jpp
name: text
name: jpe
name: ta
title是不包含任何组件的title。 这是一个新问题吗?
你的else
块需要return
你递归的内容。 就像是,
} else {
return findComponent(str, c);
}
你的else
块应该是:
else {
Component sub = findComponent(str, c);
if (sub != null) return sub;
}
否则,您将只检查您的第一个组件,只检查其第一个子组件,并且只检查第一个子组件,依此类推。
在你的else
块中,你还需要一个return
语句:
return findComponent(str, c);
这是因为你在最后返回null ..删除该行并更改该循环以返回递归调用..在else ..
if(c.getName() != null){
if(c.getName().equals(str)){
System.out.println("Found it! " + c.getName());
return c;
} else {
return findComponent(str, c);
}
}
把你的return null;
你的else
代码块中的语句,如下所示:
} else {
findComponent(str, c);
return null;
}
扩展我对你的问题的评论,我会尝试这样的事情:
public Component findComponent(String str, Component tt){
if ( tt instanceOf Container )
for (Component c : ((Container) tt).getComponents()) {
System.out.println("name: " + c.getName());
if(c.getName().equals(str)){
System.out.println("Found it! " + c.getName());
return c;
} else {
Component c = findComponent(str, c);
if ( c != null ) return c;
}
return null;
}
else if(c.getName().equals(str)){
System.out.println("Found it! " + c.getName());
return c;
}
else
return null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.