2012-01-16 42 views
-1

我創建一個返回10的倍數的函數?如何創建一個隨機擴展,返回10的倍數?

public static int NextInt(this Random rnd, int min = 0, int max = 1) 
{ 
    if (rnd == null) throw new ArgumentNullException("rnd"); 
    if (min >= max) throw new InvalidOperationException(); 
    var delta = max - min; 

    return min + (int)(rnd.NextDouble() * delta + min); 
} 

public static int MultipleOf10(this Random rnd, int minZeros = 1, 
    int maxZeros = 10) 
{ 
    if (rnd == null) throw new ArgumentNullException("rnd"); 

    int pow = NextInt(rnd, minZeros, maxZeros); 
    return (int)Math.Pow(10, pow); 
} 

我對這兩個功能有疑問。第一個必須與Next()類似,另一個必須返回十的倍數。

你能指出我在哪裏修復它嗎?因爲我幾乎可以肯定這一點。

+3

你的疑問到底是什麼? – 2012-01-16 19:52:45

+3

多少10,還是10的冪?他們非常不同。 – 2012-01-16 19:54:45

+0

比第一個像Random.Next()工作,並且另一個必須返回十的倍數像.. 10,1000,100,100000 .. 那麼,權力.. – 2012-01-16 19:55:09

回答

2

我想NextInt()最後一行應

return min + (int)(rnd.NextDouble() * delta); 

或者:

return min + rnd.Next(delta); 

甚至更​​好:

return rnd.Next(min, max); 

此外,你應該記住的是,上Random方法的限制是排他性的。所以,如果rnd.NextInt(i, j)ij包容之間返回的數字,你可能想改變delta來計算:

int delta = max - min + 1; 

,或者如果你使用上面的最後一個選項,將其更改爲:

return rnd.Next(min, max + 1); 
+1

或者甚至更好:'return rnd.Next(min,max + 1);'(儘管我認爲是安全的,請確保max 2012-01-16 20:08:28

+0

謝謝,我忘記了那個過載。 – svick 2012-01-16 20:11:16

0

我認爲你需要定義MultipleOf10方法,像這樣:

public static int MultipleOf10 
     (this Random rnd, int minZeros = 1, int maxZeros = 10) 
{ 
    if (rnd == null) throw new ArgumentNullException("rnd"); 
    if (minZeros >= maxZeros) throw new InvalidOperationException(); 

    return (int)Math.Pow(10, rnd.Next(minZeros, maxZeros)); 
} 

而且您不需要NextInt方法。