Yanıtlar:
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
Random()
zamana bağımlı bir tohum kullanır, ancak bunu açıkça okunabilirlik için yazmak daha iyidir.
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
Gibi bir şey:
var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);
DateTime.Now.Millisecond
?
Random
zaten bir sistem değeri ile tohumlanır ve Millisecond
yalnı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.
Environment.TickCount
.
kullanın:
Random r = new Random();
int x= r.Next(10);//Max range
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;
}
return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
Tamsayılar ve çiftler oluşturan Rastgele Sınıfın yanı sıra şunları göz önünde bulundurun:
Yığın Taşması sorusu (U) Int64 ve Ondalık rasgele kısıtlanmış değerlerin üretilmesi
İş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);
double rDouble = (r.NextDouble()*2)-1.0;