2015-12-11 168 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; 
}