2016-01-13 57 views
-3

我使用Random类来生成随机任意整数,但它总是返回相同数量的随机总是生成相同数量的

static Random rand = new Random(); 
public static int GetOrderID() 
{   
    return rand.Next(Math.Abs(int.MinValue + 1), int.MaxValue); 
} 

通知的随机类是静态和功能外产生

+10

提示:Math.Abs​​(int.MinValue + 1)的值是多少?它如何与'int.MaxValue'进行比较?现在'Next(x,x)'将返回'x',答案应该比较清楚。 :) –

回答

6

,你会想到什么,如果

Math.Abs(int.MinValue + 1) 

等于

int.MaxValue 

所以你的范围只包含一个数字。

2

这很简单:调用Math.Abs将从数字中删除标志。由于最小整数为-2,147,483,648,其绝对值(增加1)为2,147,483,647,它等于int.MaxValue的绝对值。

所以当拨打Math.Abs(int.MinValue + 1), int.MaxValue时,你总是得到2,147,483,647作为返回值,对吧?

如果您需要任何int,您可以使用rand.Next(int.MinValue, int.MaxValue)而不使用Math.Abs。对于任何非负整数,您可以使用没有任何参数的重载。