2012-01-16 92 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方法。