使用for循环

时间:2015-05-29 00:19:43

标签: java string for-loop return

我有一个方法可以返回平面的LinkedList中所有人的名字。

然而,即使方法中有一个return语句,我仍然被告知有一个缺少的return语句。

如何在不添加其他退货声明的情况下解决这个问题?为什么它被认为无效?是否将另一个return语句更改为返回的内容?

非常感谢任何反馈。

public String check() {

        for (Person person: passengers)
            {
                return person.getName();
            }    
    }

3 个答案:

答案 0 :(得分:5)

因为如果passengers为空,则永远不会输入循环。

如果从未输入循环,假设其中只有返回语句,我们就有一个严重的问题,你不觉得吗?就像没有return一样。

您需要在循环之外添加另一个return语句。

另请注意,return会自动退出该方法,因此我认为这不是您想要的问题所在的问题:

  

我有一个方法可以返回LinkedList中所有人的名字   对于飞机。

修改

根据您的编辑,这里如何返回包含所有名称的列表:

return passengers.
          .stream()
          .map(Person::getName)
          .collect(Collectors.toList());

请注意,您需要将方法的签名更改为

public List<String> check()

答案 1 :(得分:4)

在评论中回答你的问题。您只能从函数返回单个对象。您可以使用另一个容器并使用名称填充它并返回该容器。例如,

public LinkedList<String> check() {

  LinkedList<String> names = new LinkedList<String>();

  for (Person person: passengers) {
    names.add( person.getName() );
  }

  return names;
}

答案 2 :(得分:1)

你到底想要完成什么,在这里?

目前,支票只返回第一位乘客的姓名。考虑一下您的程序如何流动以及您希望它做什么。

要回答您的问题,您需要为代码中的每个可能路径设置“转义”。即使某个块总是应该捕获并返回(不是按照定义,而只是根据您认为代码应该如何流动),您需要处理这样的情况,使得该块不会捕获并返回。这可以通过修复第一个块来实现它实际上是一个包罗万象,或者只是在第一个块没有捕获时返回或抛出错误。

即。

public boolean check() {
   ... 
   if (shouldAlwaysBeTrue) return false;
}

不起作用,因为根据定义,shouldAlwaysBeTrue不是真的。

public boolean check() {
    ... 
    if (shouldAlwaysBeTrue) return false;
    return true;
}