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

本文关键字:返回 随机 创建 何创建 一个 扩展 | 更新日期: 2023-09-27 18:20:40

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

你能告诉我在哪里修吗?因为我几乎可以肯定。

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

我认为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);

我认为您需要定义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方法。