首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java循环情况下的递归缺失

java循环情况下的递归缺失
EN

Stack Overflow用户
提问于 2014-01-04 23:10:29
回答 1查看 54关注 0票数 0

我的目标是将所有团队成员与团队领导人联系起来,但要分层次进行。比尔是一位顶尖的队长,约翰和艾丽斯比他低一级,玛丽比约翰和爱丽丝低一级,等等。

代码语言:javascript
复制
Team leader   Team members
=========      ==========
Bob           ""
Marry        Bob
John         Marry
Alice        Marry
Bill         John,Alice

所以我用

代码语言:javascript
复制
final static SetMultimap<String, String> teamMap = HashMultimap
    .create();

我想给每一位队长一个完整的团队成员名单。

代码语言:javascript
复制
eg : For Alice as a Team Leader, her full team members list is Marry, Bob. 
     For Bill as a Team Leader, his full team members list is John, Alice, Marry, Bob

由于递归似乎解决了我的问题,所以我使用以下方法

代码语言:javascript
复制
   public static List<String> getTeamMembers(String teamLeader) {

    List<String> teamMembers = teamMembersMap.get(teamLeader);
    fullTeamMembers.addAll(teamMembers);

    for (String teamMember : teamMembers) {
        if (teamMember.equalsIgnoreCase("")) {
**// if teamMember is John go to Marry then Bob and return recursively 
// without treating Alice loop!**
        return fullTeamMembers;
        } else {
        return getTeamMembers(teamMember);
        }
    }
**// compiler error otherwise force to return something here
// maybe in case teamMembers is empty****
    return null;

    }

还有我的电话

代码语言:javascript
复制
for (String teamLeader : teamMembersMap.keySet()) {
    System.out.println("********************************");
    System.out.println("**************teamLeader :" + teamLeader);
    fullTeamMembers.clear();
    List<String> fullTeamMembers = getTeamMembers(teamLeader);
    teamMembersMap.putAll(teamLeader, fullTeamMembers);

}

但是,我对代码中注释中的两点进行了讨论:循环问题和返回编译器错误。欢迎任何帮助以更好的方式解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-04 23:15:10

当然,它告诉您要在那里放置一个return语句。您的teamMembers可以是空的,甚至是空的。除了一些缺失的空/空检查之外,您的代码没有任何问题。

如果你真的想要一个改进和无效的安全,下面是我的建议:

代码语言:javascript
复制
public static List<String> getTeamMembers(final String teamLeader) 
{
     final List<String> result = new ArrayList<>(); // fullTeamMembers
     final List<String> teamMembers = teamMembersMap.get(teamLeader); // Can be NULL or empty

     if (teamMembers == null || teamMembers.isEmpty())
          return result; // Return empty array

     // Else, carry on
     result.addAll(teamMembers);

     for (String teamMember : result) 
          if ( !teamMember.equalsIgnoreCase("") ) 
               return getTeamMembers(teamMember); // Go recursively if not ""

     // Return result from map
     return result;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20927873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档