c#如果一个或两个大于0,则最少两个数字

时间:2011-08-22 17:20:58

标签: c#

我正在寻找的逻辑是,如果其中一个数字是> = 0(它们不一定是),那么返回两个中的最小值也大于0.代码I'为它写的是如此丑陋,我很惭愧发布它!

编辑: 样品 1,-1 => 1 5,6 =>五 -1,-1 => 0

(如果两者都小于0,则返回0)

8 个答案:

答案 0 :(得分:14)

我将尝试我的精神力量,并假设如果两者都为零,你想要返回0.

换句话说:

return x < 0 && y < 0 ? 0
     : x < 0 ? y
     : y < 0 ? x
     : Math.Min(x, y);

我确信我可以做得更好......

如果它们都大于0,那么至少有一个小于零,所以你只关心它们中的较大者,或者如果它们都小于零则为0 。否则,我们只采取最低限度。

return x < 0 || y < 0 ? Math.Max(Math.Max(x, y), 0) : Math.Min(x, y);

如果您不太关心性能,可以使用:

new[] { x, y }.Where(z => z > 0)
              .DefaultIfEmpty() // Make sure there's at least one entry
              .Min();

坦率地说,这些都不是非常好,IMO。我想要对他们中的任何一个发表评论......

答案 1 :(得分:7)

这太丑了吗?

private int GetSmallestNonNegative(int a , int b)
{
    if (a >= 0 && b >= 0)
        return Math.Min(a,b);
    else if (a >= 0 && b < 0)
        return a;
    else if (a < 0 && b >= 0)
        return b;
    else
        return 0;
}       

答案 2 :(得分:6)

我认为这很简单,可以扩展到任何数字参数,并且相当好地反映了问题的原始措辞(“一组数字的最小值也大于或等于0”):

new[] { a,b,0 }.Where(x => x >= 0).Min();

答案 3 :(得分:2)

If (a>=0 &&b>=0)
 return Math.Min(a,b);

var min =Math.Max(a,b);
 return min<0 ? 0: min;

答案 4 :(得分:1)

尝试(虽然没有美):

Math.Max (Math.Sign (Math.Max (x,0)), Math.Sign (Math.Max (y, 0))) == 0 ? 0 : ((Math.Sign (Math.Max (x,0)) + Math.Sign (Math.Max (y, 0))) == 2 ? Math.Min (x, y): Math.Max (x, y ))

答案 5 :(得分:1)

return (a >=0 && b>=0) ? Math.Min(a,b) : (Math.Max(a,b) < 0 ? 0 : Math.Max(a,b));

答案 6 :(得分:1)

return (a >= 0 || b >= 0) ? Math.Min(Math.Max(0,a), Math.Max(0,b)) : 0;

(编辑)小的变化,当其中任何一个为零时,性能稍好一些

return (a > 0 || b > 0) ? Math.Min(Math.Max(0,a), Math.Max(0,b)) : 0;

答案 7 :(得分:1)

我希望这会有所帮助。

Max= ((num1+num2)+Math.Abs(num1-num2))/2
and Min= ((num1+num2)-Math.Abs(num1-num2))/2