如何创建一个随机扩展,其中返回10的倍数?

时间:2012-01-16 19:51:33

标签: c# function random

我正在创建一个返回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(),另一个必须返回十的倍数。

你能指出我在哪里修理它吗?因为我几乎可以肯定。

2 个答案:

答案 0 :(得分: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 :(得分: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方法。