如何创建一个随机扩展,其中返回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的倍数。
你能告诉我在哪里修吗?因为我几乎可以肯定。
我认为NextInt()
的最后一行应该是
return min + (int)(rnd.NextDouble() * delta);
或者:
return min + rnd.Next(delta);
甚至更好:
return rnd.Next(min, max);
此外,您应该记住Random
方法的上限是互斥的。因此,如果rnd.NextInt(i, j)
应该返回i
和j
之间的数字(包括),您可能需要将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
方法。