2016-01-13 85 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。對於任何非負整數,您可以使用沒有任何參數的重載。

相關問題