C # kullanarak bir aralıkta rastgele bir sayı üretin


267

Bir aralıkta rastgele sayılar üretmeye nasıl gidebilirim?

Yanıtlar:


419

Deneyebilirsin

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

Bir bak bakalım

Random Class , Random.Next Yöntemi (Int32, Int32) ve Random.NextDouble Yöntemi


30
Sadece bir not eklemek için, NextDouble () kullanıyorsanız ve alt sınırın sıfır olmasını istemiyorsanız. Üst sınır ve alt sınır arasındaki farkla çarpılır, ardından alt sınır ve sıfır arasındaki farkı eklersiniz. -1 - 1 için double rDouble = (r.NextDouble()*2)-1.0;
Tom Heard

2
Veya -1.0 ve 1.0 aralığında basitleştirilmiş bir çift jeneratör: Double randDoubleY = new Random (). Sonraki (-100, 100) / 100.0D;
BoiseBaked

1
Random()zamana bağımlı bir tohum kullanır, ancak bunu açıkça okunabilirlik için yazmak daha iyidir.
Evgeni Sergeev

44

Aşağıdaki kodu deneyin.

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

Gibi bir şey:

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

2
ne için DateTime.Now.Millisecond?
Hille

1
Başlamak için bir şey koymanız gerekir ... Rastgele nesne, verdiğiniz değer üzerinde çok fazla matematik yapar ve bunu , aynı Rastgele nesnedeki her Next () çağrısının sonuçlanacağı şekilde yapar önceki çağrıya oldukça rastgele bir değerde. Sonucu farklı Rastgele nesneler arasında daha rasgele yapmak için farklı bir sayı ile başlarsınız - burada DateTime.Now.Millisecond. Değişen bir değer yerine bir sabit koyarsanız, aynı sonuçları .Next () öğesinden alırsınız.
Mike M

12
Randomzaten bir sistem değeri ile tohumlanır ve Millisecondyalnızca 0 ile 999 arasında bir sayıdır. Bu satır çifti her zaman kod içinde birlikte olsaydı rnd.Next, tohumun her seferinde sıfırlanması nedeniyle sadece 1000 olası değer olurdu . Aynı tohum girişi, aynı rastgele sayı. Manuel çekirdeği dışarıda bırakırdım.
John McDonald

@ JohnMcDonald, haklısın. Sadece kesin olmak gerekirse, ilklendirilir Environment.TickCount.
Parag Meshram

11

kullanın:

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

2
Bu bir aralık belirtmez.
Winger Sendon

1
Rastgele bir aralık elde etmek için daha düşük_değer + r.Sonraki (10) yaparsınız.
Austin Salgat

6

Gelecekteki okuyucular için bir aralıkta rastgele bir sayı istiyorsanız aşağıdaki kodu kullanın:

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

C # Min ve maks arasında rastgele çift

Kod örneği


2
Formül şu şekilde olmalıdır:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Frank Sebastià


3

İşte Darrelk cevap güncellenmiş versiyonu . C # genişletme yöntemleri kullanılarak uygulanır . Bu mu bellek ayrılamadı ( yeni Rastgele () ) her zaman bu yöntem çağrılır.

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

Kullanım (RandomExtensionMethods sınıfını içeren ad alanını aldığınızdan emin olun):

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.