2015-12-11 132 views
0

我得到的错误“缺少return语句”与此代码:缺少return语句for each循环

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

我要回复O返回谁通过写这本书的作者的全名如果不存在带有该标题的Book,或者标题为空或“”,则返回null。

我试图把这样的代码:

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

但它总是返回第一作者在列表...

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

+2

好耶......你返回第一个和多数民众赞成它。你需要比较'串标题'与任何,然后如果他们匹配返回那个。 '请看看循环的逻辑。这是有道理的,为什么它只返回第一个' – 3kings

+6

首先要做的是让你的代码更清晰*永远*使用花括号循环。例如,第二个代码块中的缩进表明'return null'在循环中 - 但事实并非如此。生活用括号清楚得多。 –

+0

您可能会注意到您正在检查'!= null'而不是相同的'title'。您可能想要检查这一点。 – SomeJavaGuy

回答

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; 
} 

,总是使用大括号。在没有他们的情况下和他们一起生活会更容易。

0

您的第一个案例缺少返回语句,因为它是。考虑有一个空的库存。所以for循环将不会执行任何运行,也不会执行if语句或else语句。然后就没有回报声明了。

你的第二种情况有一个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; 
} 
0
public String getAuthorFullName(String title) { 
    for (Book authorName : inventory) { 
     if (authorName.getTitle() != null && authorName.getTitle().equals(title)) { 
      return authorName.getAuthor().getName().getFullName(); 
     } 
    } 
    return null; 
}