【问题标题】:Missing return statement in a for each loop每个循环中缺少 return 语句
【发布时间】:2015-12-11 06:59:21
【问题描述】:

我收到此代码的错误“缺少返回语句”:

public String getAuthorFullName(String title)
{
    for (Book authorName : inventory)
        if (authorName.getTitle() != null)
        {
            return authorName.getAuthor().getName().getFullName();
        } 
        else
        {
            return null;
        }
} 

我想返回 o 返回写此书名的作者的全名,如果没有该书名的书,或者如果 title 为 null 或 "",则返回 null。

我试着把代码写成这样:

public String getAuthorFullName(String title)
{
    for (Book authorName : inventory)
        if (authorName.getTitle() != null)
        {
            return authorName.getAuthor().getName().getFullName();
        }
        return null;

但它总是返回列表中的第一个作者...

有人可以帮帮我吗?非常感谢。

【问题讨论】:

  • 嗯,是的......你返回第一个,就是这样。您需要将String title 与任何内容进行比较,然后如果它们匹配则返回那个。 Please do look through the logic of the loop. It makes sense why it is only returning the first
  • 首先要做的是通过always 使用大括号来让你的代码更清晰。例如,第二个代码块中的缩进表明 return null 在循环中 - 但事实并非如此。戴上牙套,生活更加清晰。
  • 您可能会注意到您正在检查!= null,而不是相同的title。您可能也想检查一下..
  • 我还强烈建议使用更有意义的名称 - 书与作者姓名不同。
  • 第一个代码中出现错误,因为库存可能为空,因此不会执行 if 语句。您需要将 book.getTitle() 与 if 语句中的方法参数 title 进行比较,以免返回第一本书作者

标签: java return


【解决方案1】:

试试这样的

public String getAuthorFullName(String title)
{
    for (Book authorName : inventory) {
        if (authorName.getTitle() != null && authorName.getTitle().equals(title)) {
            return authorName.getAuthor().getName().getFullName();
        }
    }
    return null;
}

并且总是使用大括号。和他们一起生活比没有他们要容易得多。

【讨论】:

    【解决方案2】:
    public String getAuthorFullName(String title) {
        for (Book authorName : inventory) {
            if (authorName.getTitle() != null && authorName.getTitle().equals(title)) {
                return authorName.getAuthor().getName().getFullName();
            } 
        }
        return null;
    } 
    

    【讨论】:

      【解决方案3】:

      您的第一个案例缺少 return 语句,因为它是。考虑有一个空库存。所以 for 循环不会运行,if 语句或 else 语句都不会被执行。然后就没有return语句了。

      您的第二种情况有一个 return 语句,它不是 for 循环的一部分,因此是正确的 java 语法。但是你只检查getTitle() != null。对于每个设置了标题的情况都是如此,即使它是空的。

      使用String.equals(String another) 检查字符串的相等性。所以你真正想做的是:

      public String getAuthorFullName(String title){
          for (Book authorName : inventory)
              if (authorName.getTitle() != null && authorName.getTitle().equals(title))
                  return authorName.getAuthor().getName().getFullName();
          return null;
      }
      

      【讨论】: