我正在创建一个返回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(),另一个必须返回十的倍数。
你能指出我在哪里修理它吗?因为我几乎可以肯定。
答案 0 :(得分:2)
我认为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);
答案 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
方法。