Створіть випадкове число в діапазоні, використовуючи C #


266

Як я можу створити випадкові числа в межах діапазону?

Відповіді:


418

Ви можете спробувати

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: Подвійний randDoubleY = новий Random (). Наступний (-100, 100) / 100,0D;
BoiseBaked

1
Random()використовує насіння, залежне від часу, але писати це явно краще для читабельності.
Євгеній Сергєєв

44

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

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?
Hille

1
Потрібно поставити щось для цього, щоб почати з ...... Об'єкт Random просто робить багато математики за значенням, яке ви даєте, і робить це таким чином, що кожен виклик Next () на одному і тому ж об'єкті Random призведе до у значенні, досить випадковому попередньому дзвінку. Щоб зробити результат більш випадковим для різних випадкових об'єктів , ви починаєте з іншого числа - тут, DateTime.Now.Millisecond. Якщо ви будете ставити константу, а не змінює значення, ви отримаєте ті самі результати від .Next ().
Майк М

12
Randomвже засіяне системним значенням і Millisecondє лише числом від 0 до 999. Якби ця пара рядків завжди була разом у коді, було б лише 1000 можливих значень rnd.Nextзавдяки тому, що насіння щоразу скидається. Це ж насіння, однакове випадкове число. Я б покинув ручне насіння.
Джон Макдональд

@JohnMcDonald, ти прав. Щоб бути точним, він ініціалізований з Environment.TickCount.
Параг Мешрам

11

Використання:

Random r = new Random();
 int x= r.Next(10);//Max range

2
Це не визначає діапазон.
Вінгер Сендон

1
Ви просто зробите нижнє значення + r.Наступний (10), щоб отримати випадковий діапазон.
Остін Салгат

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

Ось оновлена ​​версія з відповіді Даррелка . Він реалізується за допомогою методів розширення C # . Він не виділяє пам'ять ( новий 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.