2014-07-02 62 views
0

以下方法的返回语句难倒我:用||递归返回语句在它

public static boolean groupSum(int start, int[] nums, int target, int max) { 

     if (start >= nums.length) { return target == 0; } 
     // can't use max value 
     else if (nums[start] == max) { 
      return groupSum(start + 1, nums, target, max); 
     } 
     else { 
      return groupSum(start + 1, nums, target - nums[start], max) || 
        groupSum(start + 1, nums, target, max); 
     } 
     } 

如果你注意到,return语句具有|| “或”条款,并且我对这里返回的条款感到困惑......如果你能提供一个关于它如何工作的解释,那就太好了。

+0

一个'return'声明_returns_一个值,而不是一个条款。 “||”是一个应用于两个操作数并产生一个值的运算符。 –

+0

那么哪些值被返回?左侧还是右侧的值?它基于什么? – user3730244

+0

@ user3730244 - 结果是两个操作数的比较,而不是任何一个操作数 – kolossus

回答

2

||运算符未选择要返回哪个表达式,而是执行两个表达式之间的逻辑或,并在此之后,return返回结果。

return语句将返回true如果任一表达式为true,它将返回false如果两个表达式是false

+0

@RichardTingle意思一件事,打另一个。纠正。 – rgettman

4

由于||是一个所谓的short curcuit运算符,因此会计算第一个表达式,并且如果且仅当它的计算结果为true,则立即返回true,而不计算第二个表达式。如果失败,则评估第二个,并返回结果。

所以,如果你有

a() || b() 

和计算结果为true B()不计算

+0

如果一个剂量没有评估为真,b又是什么? – user3730244

+0

@ user3730244然后你得到'false ||返回FALSE。那是什么意思? – Justin

+0

我不知道什么是false ||错误意味着......方法刚刚崩溃了吗? – user3730244