2017-02-21 97 views
0

我寫了這個函數,Eclipse說有沒有返回語句類型Date但是在else {}中有一個!無返回聲明Prroblem

問題出在哪裏?

public Date compareDate(Date Kred_Deb_Date, Date Book_Date){ 
    Date date1 = null; 
    if (Book_Date.compareTo(Kred_Deb_Date)<0){ 
     date1 = get_book_date(); 
     compareDate(Kred_Deb_Date, date1); 
    }else if (Book_Date.compareTo(Kred_Deb_Date)>0){ 
     date1 = Book_Date; 
     return date1; 
    } 
} 

回答

4

返回應該在您的條件之後或您可以發送默認日期對象。如果沒有條件滿足,那麼它將返回默認日期。

請檢查以下代碼,我已更改返回碼位置。

public Date compareDate(Date Kred_Deb_Date, Date Book_Date){ 
    Date date1 = null; 
    if (Book_Date.compareTo(Kred_Deb_Date)<0){ 
     date1 = get_book_date(); 
     compareDate(Kred_Deb_Date, date1); 
    }else if (Book_Date.compareTo(Kred_Deb_Date)>0){ 
     date1 = Book_Date; 

    } 
     return date1; 
} 
+0

由於您可以更輕鬆地設置斷點,因此具有* single *'return'值可以幫助調試。有一個upvote! – Bathsheba

+0

:)你可以接受我的答案,如果它適合你。謝謝。 –

+0

這是這方面的常見解決方案。在我的觀點中,如果你使用Java 8,使用'Optional'而不是返回'null'的可能性更爲合理。另外,你的第一個'if'中的第二行返回一個未使用的值。 –

2

爪哇堅持認爲對非void功能,對所有程序控制路徑的return值。

您目前已經安排事情的方式,這是不是這樣的:

值不爲Book_Date.compareTo(Kred_Deb_Date)>0Book_Date.compareTo(Kred_Deb_Date) == 0返回。

您的意思是寫return compareDate(Kred_Deb_Date, date1);if塊的true部分,並更換else if (...)else

1

如果您的if條件已通過驗證,則不會返回任何內容。

兩個解決方案:

  • 添加一個return語句在如果
  • 在你的函數

在這種情況下的末尾添加return語句,我想你試圖做到以下幾點:

public Date compareDate(Date Kred_Deb_Date, Date Book_Date) { 
    Date date1 = null; 
    if (Book_Date.compareTo(Kred_Deb_Date) < 0) { 
     date1 = get_book_date(); 
     compareDate(Kred_Deb_Date, date1); 
    } else if (Book_Date.compareTo(Kred_Deb_Date) > 0) { 
     date1 = Book_Date; 
    } 
    return date1;  
} 
0

通過移動return語句一條線下來的常見的答案已經給出,所以這裏是它阻止你得到一個null作爲返回值一個更現代的解決方案:

public Optional<Date> compareDate(Date Kred_Deb_Date, Date Book_Date){ 
    Date date1 = null; 
    if (Book_Date.compareTo(Kred_Deb_Date)<0){ 
     date1 = get_book_date(); 
     compareDate(Kred_Deb_Date, date1); 
    } else if (Book_Date.compareTo(Kred_Deb_Date)>0){ 
     date1 = Book_Date; 
    } 
    return Optional.ofNullable(date1); 
} 

但儘管這樣,有一個未使用的遞歸調用返回值沒有使用(第一,如果第二行),只是爲了通知。