以递归方式查找对象,找到后返回null

时间:2015-12-30 22:30:43

标签: java recursion

我创建了一个按名称查找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?

如果我从控制台提供的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是不包含任何组件的标题。这是一个新问题吗?

6 个答案:

答案 0 :(得分:4)

您的else阻止需要return您所递归的内容。像,

} else {
    return findComponent(str, c);
}

答案 1 :(得分:4)

您的else阻止应为:

else {
  Component sub = findComponent(str, c);
  if (sub != null) return sub;
} 

否则,您将只检查您的第一个组件,只检查其第一个子组件,并且只检查第一个子组件,依此类推。

答案 2 :(得分:2)

else区块中,您还需要return声明:

return findComponent(str, c);

答案 3 :(得分:1)

这是因为你在最后返回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);
    }
 }

答案 4 :(得分:1)

$ ./gradlew artifactoryPublish [buildinfo] Not using buildInfo properties file for this build. :artifactoryPublish Deploying build descriptor to: http://localhost:8081/artifactory/api/build Build successfully deployed. Browse it in Artifactory under http://localhost:8081/artifactory/webapp/builds/My_special_build_name/1 BUILD SUCCESSFUL 语句放在return null;代码块中,如下所示:

else

答案 5 :(得分:1)

扩展我对你的问题的评论,我会尝试这样的事情:

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;
}