2016-05-29 112 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