在 for 循环中具有 return 的方法缺少 return 语句错误

Missing return statement error with method that has a return in for loop

我有一个方法可以return将飞机的 LinkedList 中的所有人员姓名都列出来。

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

如何在不放入另一个 return 语句的情况下解决这个问题?为什么它不被认为是有效的?是否将另一个 return 语句更改为 returned?

非常感谢任何反馈。

public String check() {

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

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

如果循环永远不会进入,假设循环中只有 return 语句,我们有一个严重的问题,你不觉得吗?就好像根本没有 return

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

另请注意,return 会自动退出该方法,所以我认为这不是您问题中这句话所要的:

I have a method that returns all the names of people in a LinkedList for a plane.

编辑

根据您的编辑,您可以在此处 return 包含所有名称的列表:

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

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

public List<String> check()

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

public LinkedList<String> check() {

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

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

  return names;
}

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

目前,只会检查return第一位乘客的姓名。想想你的程序是如何流动的以及你想要它做什么。

要回答您的问题,您的代码中的每个可能路径都需要有一个 'escape'。即使某个块应该始终捕获并且 return (不是根据定义,而是根据您认为代码应该如何流动),您需要处理这种情况,以便该块不会捕获并且 return.这可以通过修复第一个块以使其真正成为一个包罗万象的方式来完成,或者通过简单地 returning 或如果第一个块没有捕获则抛出错误。

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

不起作用,因为 shouldAlwaysBeTrue 根据定义不正确。

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