【问题标题】:Missing return statement error with method that has a return in for loop在 for 循环中有返回的方法缺少返回语句错误
【发布时间】:2015-08-11 16:57:06
【问题描述】:

我有一个方法可以返回飞机的 LinkedList 中的所有人员姓名。

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

如何在不添加另一个 return 语句的情况下解决这个问题?为什么它不被认为是有效的?放入另一个 return 语句会改变返回的内容吗?

非常感谢任何反馈。

public String check() {

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

【问题讨论】:

  • 每个代码路径都必须return 一些东西,即如果乘客, even then the block must return` 中没有passenger 一些值。做必要的事情,这样该方法也能够处理这种情况:-)
  • 这不会返回“所有人的名字”,只返回第一个人的名字。函数在 return 语句后退出。
  • @SU3 如果返回退出循环,那么循环遍历所有乘客姓名的正确方法是什么?

标签: java string for-loop return


【解决方案1】:

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

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

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

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

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

编辑

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

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

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

public List<String> check()

【讨论】:

  • 但是我会返回什么?它会返回null吗?并且将它放在循环之外是否意味着在遍历乘客列表后它会跳转到那个返回?
  • 如果返回退出循环,那么循环遍历所有乘客姓名的正确方法是什么?
  • @Mark 如果您的列表为空,您将返回您想要返回的内容。不,这并不意味着你会跳转到那个返回,就好像你已经在循环中返回一样,你会退出循环。
  • @Mark 我编辑给你一个我认为你想要的例子。
【解决方案2】:

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

public LinkedList<String> check() {

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

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

  return names;
}

【讨论】:

    【解决方案3】:

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

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

    要回答您的问题,您需要为代码中的每个可能路径设置一个“转义”。即使某个块应该始终捕获并返回(不是根据定义,而只是根据您认为代码应该如何流动),您也需要处理这种情况,以使该块不会捕获并返回。这可以通过修复第一个块使其真正成为一个包罗万象的方法来完成,或者如果第一个块没有捕获,则只需返回或抛出一个错误。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多