2016-05-29 150 views
-2

我遇到了識別缺少返回語句的方法的問題。這裏有什麼問題?在方法中缺少return語句

public static int doThisEven(int n) { 
    if (n == 2) { 
     return 2; 
    } else { 
     if (n % 2 == 0) { 
      return n + doThisEven(n - 1); 
     } 

    } 

} 
+1

當'n'奇數時,您的方法不會返回任何內容 – Eran

回答

0

你需要編寫garanties迴歸的方法沒有什麼奧美代碼什麼用,如果其他條件發生

if (n == 2) { 
     return 2; // return if n is 2 
    } else { 
     if (n % 2 == 0) { 
      return n + doThisEven(n - 1); return 2; // return if n is off 
     } 
    } 

你的代碼返回時

  1. N = 2
  2. n是偶數

但是,如果n +都不是以上所述,讓我們說n = 3? 那麼該方法將永遠不會找到返回語句,因此您在說明方法的合同。

1

嘗試在所有情況下返回值:

public static int doThisEven(int n) { 
    if (n == 2) { 
     return 2; 
    } else { 
     if (n % 2 == 0) { 
     return n + doThisEven(n - 1); 
     } 

    } 
    return 0;//if none of the previous cases are true 
} 

你也可以試試這個:

public static int doThisEven(int n) { 
if (n == 2) { 
    return 2; 
} else { 
    if (n % 2 == 0) { 
    return n + doThisEven(n - 1); 
    }else 
    { 
     return 0;//if none of the previous cases are true 
    } 

} 

注意,返回0;不是你應該返回的數字,我只是爲了讓程序編譯而做出的返回語句的例子。

+0

但這會使其他部分不必要。它應該返回n? –

+0

我會引發異常而不是返回默認值。因爲如果將來邏輯會改變,並且方法可能會在某個值上返回0,那麼這可能會導致問題。 – Arctigor

+0

@ J.Koh - 一個函數必須返回一個值給**所有**的情況! – STF