Произведите случайное число в диапазоне, используя C #


268

Как мне создать случайные числа в диапазоне?

Ответы:


419

Можешь попробовать

Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles

Посмотри на

Случайный класс , метод Random.Next (Int32, Int32) и метод Random.NextDouble


30
Просто для добавления заметки, если вы используете NextDouble () и не хотите, чтобы нижняя граница была нулевой. Вы умножаете на разницу между верхней границей и нижней границей, затем добавляете разницу между нижней границей и нулем. Так что от -1 до 1 double rDouble = (r.NextDouble()*2)-1.0;
Том Херд

2
Или упрощенный двойной генератор в диапазоне от -1,0 до 1,0: Double randDoubleY = new Random (). Next (-100, 100) / 100.0D;
BoiseBaked

1
Random()использует зависящее от времени начальное число, но запись этого явно лучше для удобочитаемости.
Евгений Сергеев

45

Попробуйте код ниже.

Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51

34

Что-то вроде:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);

2
для чего DateTime.Now.Millisecond?
Хилле

1
Вам нужно положить что-то, чтобы оно начиналось с ...... Случайный объект просто выполняет много математических операций над значением, которое вы даете, и делает так, чтобы каждый вызов Next () для того же объекта Random приводил к в значении, совершенно случайном для предыдущего вызова. Чтобы сделать результат более случайным для разных объектов Random , вы начинаете с другого числа - здесь DateTime.Now.Millisecond. Если вы введете константу, а не изменяющееся значение, вы получите те же результаты от .Next ().
Майк М

12
Randomуже заполнен системным значением и Millisecondпредставляет собой число от 0 до 999. Если бы эта пара строк всегда была вместе в коде, было бы только 1000 возможных значений из- rnd.Nextза того, что начальное число сбрасывалось каждый раз. То же начальное число, то же самое случайное число. Я бы оставил ручное семя.
Джон Макдональд

@JohnMcDonald, ты прав. Просто чтобы быть точным, оно инициализируется с Environment.TickCount.
Параг Мешрам


6

Для будущих читателей, если вы хотите случайное число в диапазоне, используйте следующий код:

public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
    return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}

C # Случайный двойной между мин и макс

Пример кода


2
Формула должна быть следующей:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Фрэнк Себастья


3

Вот обновленная версия от Darrelk ответа . Это реализовано с использованием методов расширения C # . Он не выделяет память ( new Random () ) каждый раз, когда вызывается этот метод.

public static class RandomExtensionMethods
{
    public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
    {
        return random.NextDouble() * (maxNumber - minNumber) + minNumber;
    }
}

Использование (обязательно импортируйте пространство имен, которое содержит класс RandomExtensionMethods):

var random = new System.Random();
double rx = random.NextDoubleRange(0.0, 1.0);
double ry = random.NextDoubleRange(0.0f, 1.0f);
double vx = random.NextDoubleRange(-0.005f, 0.005f);
double vy = random.NextDoubleRange(-0.005f, 0.005f);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.