Как создать случайное расширение, где возвращается кратное 10? - PullRequest
0 голосов
/ 16 января 2012

Я создаю функцию, которая возвращает кратное 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 ]

2 голосов
/ 17 января 2012

Я думаю, что последняя строка 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);
0 голосов
/ 17 января 2012

Я думаю, вам нужно определить метод 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.

...