C # -də təsadüfi int nömrəsini necə yaratmaq olar?

C # -də təsadüfi tam ədədi necə yarada bilərəm?

1540
25 апр. Aprel ayının 25-də Rella tərəfindən təyin olundu 2010-04-25 02:09 '10 at 2:09 2010-04-25 02:09
@ 29 cavab

Random təsadüfi ədəd yaratmaq üçün istifadə olunur. (Pseudo-təsadüfi, əlbəttə.)

Məsələn:

2038
25 апр. Guffa tərəfindən verilmiş cavab 25 Apr 2010-04-25 02:19 '10 at 2:19 2010-04-25 02:19

Hər dəfə yeni Random () yaratdığınızda, başlanılır. Bu, sıx loopda eyni qiyməti bir neçə dəfə əldə etmək deməkdir. Random bir nümunə saxlamalı və eyni nüsxədə Next istifadə etməyə davam etməlisiniz.

border=0
 //Function to get random number private static readonly Random getrandom = new Random(); public static int GetRandomNumber(int min, int max) { lock(getrandom) // synchronize { return getrandom.Next(min, max); } } 
197
04 окт. Cavab Pankaj Mishra 04 oktyabr tərəfindən verilir . 2010-10-04 14:52 '10 at 2:52 PM 2010-10-04 14:52

Sual çox sadə görünür, lakin cavabı bir az mürəkkəbdir. Görürsünüzsə, demək olar ki, hər kəs Random sinifdən istifadə etməyi təklif edir və bəziləri RNG kriptoqrafik sinfindən istifadə etməyi təklif edirlər. Amma nə vaxt seçəcəyini.

Bunu etmək üçün ilk növbədə Qəza və onun fəlsəfəsini başa düşmək lazımdır.

Https://www.youtube.com/watch?v=tCYxc-2-3fY səhifəsindən istifadə edərək, şans fəlsəfəsinə daha dərinləşən bu videonu izləmək məsləhətdir.

Əvvəla, RANDOMNESS fəlsəfəsini anlayaq. Bir adamın RED, GREEN və SARL arasında içəridə olanları seçməsini söyləyərkən. Bir insanı RED, SARI və ya YEŞİL seçin?

2019

new Random() işarəsinin hazırkı vaxt damına əlavə olunmasına diqqət yetirin.

Yalnız bir ədəd yaratmaq istəyirsinizsə , istifadə edə bilərsiniz:

new Random().Next( int.MinValue, int.MaxValue )

Daha ətraflı məlumat üçün Random sınıfına baxın, baxmayaraq ki, unutmayın:

Bununla yanaşı, saatın həlli sona çatdığından, parametrsiz konstruktordan istifadə edərək, müxtəlif təsadüfi obyektləri yaxın ardıcıllıqla yaratmaq təsadüfi ədədlərin eyni ardıcıllığı yaradan təsadüfi sayda generator yaradır.

Buna görə, bir sıra təsadüfi ədəd yaratmaq üçün bu kodu istifadə etməyin.

76
25 апр. bu cavab 25 aprel tarixində Fyodor Soikin tərəfindən verilir. 2010-04-25 02:10 '10 at 2:10 2010-04-25 02:10
 Random r = new Random(); int n = r.Next(); 
43
25 апр. Joren tərəfindən 25 apreldə cavab verildi 2010-04-25 02:10 '10 at 2:10 2010-04-25 02:10

Kriptoqrafik cəhətdən təhlükəsiz bir versiya əlavə etmək istərdim:

Class RNGCryptoServiceProvider ( MSDN və ya dotnetperls )

İdeisiz olanları həyata keçirir.

 using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()) { byte[] randomNumber = new byte[4];//4 for int32 rng.GetBytes(randomNumber); int value = BitConverter.ToInt32(randomNumber, 0); } 
22
19 дек. Cavab 19 dekabr 19- dan verilir . 2015-12-19 00:02 '15 at 0:02 2015-12-19 00:02

Siz bir səhv təsadüfi ədəd üçün tikdiyi MiscUtil sinif kitabxanasının içərisində Jon Skeet StaticRandom metodundan istifadə edə bilərsiniz.

 using System; using MiscUtil; class Program { static void Main(string[] args) { for (int i = 0; i < 100; i++) { Console.WriteLine(StaticRandom.Next()); } } } 
13
25 апр. cavab mbcrump 25 apr verilir . 2010-04-25 02:31 '10 at 2:31 am 2010-04-25 02:31

təsadüfi sayını təmin etmək üçün Random obyektini cari millisaniyədək doldurmaq daha xeyirlidir və demək olar ki, bir neçə dəfə təkrar istifadə etməyəcəksiniz

 Random rand = new Random(DateTime.Now.Millisecond); 

Yeniləmə

new Random() toxumları bir toxum kimi istifadə etdiyini bilirəm, amma bu, yaxşı bir təsadüfi başlanğıc olduğundan, mövcud milisaniyədəki iş hələ də çox yaxşıdır.

Sonuncu bir şey, new Random() sayıya ehtiyac duyduğunuz her new Random() başlatmanıza gerek kalmadan, bir Random nesne başlattığınızda, döngü içinde ya da başqa bir şey içinde lazım olduğu kadar çox istifadə edirsiniz.

11
01 нояб. Cavab Məhəmməd Səlim tərəfindən 01 noyabr tarixində verilir. 2015-11-01 15:30 '15 'də 15:30' də 2015-11-01 15:30

COBOL cavabını istisna olmaqla, bu həllərin hamısını sınamışam ... lol

Bu həllərin heç biri kifayət qədər yaxşı deyildi. Int loop üçün təsadüfi sürətlərə ehtiyac duyuram və hətta çox geniş miqdarda hətta təkrarlanan tonların tonlarını alıram. Təsadüfi nəticələrin uzun bir həllindən sonra nəhayət bu problemi bir dəfə və hamısı həll etməyə qərar verdim.

Toxum haqqında.

Mən Guid-dən qeyri-sayısal məlumatları təhlil edərək təsadüfi bir tamsayı yaradır, sonra Random'ın sinif nümunəsi yaratmaq üçün istifadə edirəm.

 public int GenerateRandom(int min, int max) { var seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().ToString(), @"\d+").Value); return new Random(seed).Next(min, max); } 

Yeniləmə : Bir dəfə təsadüfi sinifin nümunəsini yaratsanız, sedasyon tələb olunmur. Buna görə statik bir sinif yaratmaq və bununla bir üsul çağırmaq daha yaxşı olardı.

 public static class IntUtil { private static Random random; private static void Init() { if (random == null) random = new Random(); } public static int Random(int min, int max) { Init(); return random.Next(min, max); } } 

Sonra necə bir statik sinifdən istifadə edə bilərsiniz.

 for(var i = 0; i < 1000; i++) { int randomNumber = IntUtil.Random(1,100); Console.WriteLine(randomNumber); } 

Mən bu yanaşmanın daha yaxşı olmasını etiraf etdim.

9
20 мая '15 в 0:19 2015-05-20 00:19 cavab Proximo 20 may, '15 'də 0:19 2015-05-20 00:19' da verilir

Daxili sinif Random (System.Random) tərəfindən yaradılan nömrələr, sözdə təsadüfi ədədlər yaradır.

Doğru təsadüfi nömrələrə ehtiyacınız varsa, əldə edə biləcəyimiz ən yaxın şey RNGCryptoServiceProvider kimi C # RNGCryptoServiceProvider kriptoqrafik dərslərdən istifadə edilə bilən "təhlükəsiz saxta təsadüfi generator".

Halbuki həqiqi təsadüfi ədədlərə ehtiyacınız varsa, təsadüfi sayda generator üçün bir toxum kimi, radioaktiv çürük qurğular kimi xarici bir mənbədən istifadə etməlisiniz. Təbliğ olaraq, tamamilə alqoritmik vasitələrlə yaranan hər hansı bir rəqəm həqiqətən təsadüfi ola bilməz.

6
22 июля '15 в 18:40 2015-07-22 18:40 Cavab Anshita Arya tərəfindən 22 İyul 2014 tarixində saat 18: 40-da verilir

Təsadüfi sayda aşağıdakı kodu istifadə edirəm:

 var random = new Random((int)DateTime.Now.Ticks); var randomValue = random.Next(startValue, endValue + 1); 
6
14 окт. cavab 14 aya qədər verilir . 2015-10-14 17:38 '15 at 5:38 PM 2015-10-14 17:38

Bu istifadə etdiyim sinifdir. RandomNumber.GenerateRandom(1, 666) kimi RandomNumber.GenerateRandom(1, 666)

 internal static class RandomNumber { private static Random r = new Random(); private static object l = new object(); private static Random globalRandom = new Random(); [ThreadStatic] private static Random localRandom; public static int GenerateNewRandom(int min, int max) { return new Random().Next(min, max); } public static int GenerateLockedRandom(int min, int max) { int result; lock (RandomNumber.l) { result = RandomNumber.r.Next(min, max); } return result; } public static int GenerateRandom(int min, int max) { Random random = RandomNumber.localRandom; if (random == null) { int seed; lock (RandomNumber.globalRandom) { seed = RandomNumber.globalRandom.Next(); } random = (RandomNumber.localRandom = new Random(seed)); } return random.Next(min, max); } } 
4
07 дек. Cavab AskethZ 07 dekabrda verilir . 2014-12-07 11:15 '14 da 11:15 2014-12-07 11:15
 Random random = new Random (); int randomNumber = random.Next (lowerBound,upperBound); 
4
17 марта '17 в 5:59 2017-03-17 05:59 cavab 17 mart 17: 17-də ReRoute 5:59 2017-03-17 05:59 tarixində verilir

Hər şey düzəldilməklə:

 Random random = new Random(); int randomNumber = random.Next() 

Çox vaxt limiti (min və max mumbers) nəzarət etmək istəyirəm. Buna görə, təsadüfi sayının başlayacağı və bitdiyi yerləri göstərməlisiniz.

Next() metodu iki parametrdən ibarətdir: min və maks.

Beləliklə, mən təsadüfi sayımın 5-dən 15-ə qədər olmasını istəyirsənsə, sadəcə etdim

 int randomNumber = random.Next(5, 16) 
3
22 авг. Cavab verilir ojonugwa açalifu 22 av . 2014-08-22 13:24 '14 at 13:24 pm 2014-08-22 13:24

Değiştirilen cavab burada .

Bir Intel Secure Key uyğun prosessoruna çıxışınız varsa, bu kitabxanaları istifadə edərək real təsadüfi ədədlər və simlər yarada bilərsiniz: https://github.com/JebteK/RdRandhttps://www.rdrand.com/

Sadəcə buradan ən son versiyasını yükləyin, Jebtek.RdRand funksiyasını aktivləşdirin və bunun üçün bir istifadəçi bəyanatını əlavə edin. Sonra lazım olan bütün bunlardır:

 bool isAvailable = RdRandom.GeneratorAvailable(); //Check to see if this is a compatible CPU string key = RdRandom.GenerateKey(10); //Generate 10 random characters string apiKey = RdRandom.GenerateAPIKey(); //Generate 64 random characters, useful for API keys byte[] b = RdRandom.GenerateBytes(10); //Generate an array of 10 random bytes uint i = RdRandom.GenerateUnsignedInt() //Generate a random unsigned int 

Kodunuzu yerinə yetirmək üçün uyğun prosessorunuz yoxdursa, rdrand.com-da RESTful xidmətindən istifadə edin. Layihədə iştirak edən RdRandom sarğı kitabxanası ilə yalnız bunu etmək lazımdır (qeydiyyatdan sonra 1000 pulsuz zəng)

 string ret = Randomizer.GenerateKey(<length>, "<key>"); uint ret = Randomizer.GenerateUInt("<key>"); byte[] ret = Randomizer.GenerateBytes(<length>, "<key>"); 
3
27 марта '14 в 22:36 2014-03-27 22:36 cavab 27 mart '14 'də JebaDaHut tərəfindən 10:36 2014-03-27 22:36 ' də verilir
 Random rand = new Random(); int name = rand.Next() 

İpucu yazaraq adınızı təyin etmək üçün ikinci dəyirmi bracketdə istədiyiniz hər hansı bir dəyər qoyun və kodu yaratmaq üçün ikiqat sek tapın.

2
25 июня '14 в 5:28 2014-06-25 05:28 cavab 25 iyun 2014- cü il tarixində 5:28 2014-06-25 05:28 istifadəçi tərəfindən verilir

Bir kompüter tərəfindən deterministik bir proses vasitəsilə hesablanan ədədlər təsadüfi ola bilməz.

Əgər real təsadüfi nömrələrə ehtiyacınız varsa, təsadüflər atmosfer səs-küyündən və ya radioaktiv çürükdən yaranır.

Məsələn, RANDOM.ORG (bu performansını azaldır)

1
14 марта '16 в 16:58 2016-03-14 16:58 Cavab Stefano Lonati tərəfindən 14 Mart '16 'da 16:58 2016-03-14 16:58' də verilir

Hər dəfə yeni təsadüfi generatoru istifadə edərkən nə baş verdiyini göstərmək istərdim. Təsəvvür edin ki, hər birinizin təsadüfi sayını tələb edən iki üsul və ya iki sinif var. Və siz onları birbaşa kodlaşdırırsınız:

 public class A { public A() { var rnd=new Random(); ID=rnd.Next(); } public int ID { get; private set; } } public class B { public B() { var rnd=new Random(); ID=rnd.Next(); } public int ID { get; private set; } } 

Siz iki fərqli identifikator alacaqsınız? NOPE

 class Program { static void Main(string[] args) { A a=new A(); B b=new B(); int ida=a.ID, idb=b.ID; // ida = 1452879101 // idb = 1452879101 } } 

Həll həmişə bir statik təsadüfi generatordan istifadə etməkdir. Burada:

 public static class Utils { public static readonly Random random=new Random(); } public class A { public A() { ID=Utils.random.Next(); } public int ID { get; private set; } } public class B { public B() { ID=Utils.random.Next(); } public int ID { get; private set; } } 
1
08 апр. cavab ja72 08 apr verilir . 2016-04-08 22:24 '16 at 10:24 pm 2016-04-08 22:24

Güclü təsadüfi toxum üçün, mən həmişə Kriptoqrafik RNG istifadə edirəm, Vaxt deyil.

 using System; using System.Security.Cryptography; public class Program { public static void Main() { var random = new Random(GetSeed()); Console.WriteLine(random.Next()); } public static int GetSeed() { using (var rng = new RNGCryptoServiceProvider()) { var intBytes = new byte[4]; rng.GetBytes(intBytes); return BitConverter.ToInt32(intBytes, 0); } } } 
1
25 мая '18 в 20:53 2018-05-25 20:53 Cavab Davit Tvildiani tərəfindən 25 may 1818'de 20:53 2018-05-25 20:53 tarixində verilir

Tez və asan yerləşdirmək üçün aşağıdakı kodu istifadə edin:

 new Random().Next(min, max); // for example unique name strName += "_" + new Random().Next(100, 999); 
0
10 мая '18 в 10:48 2018-05-10 10:48 Cavab Zolfaghari tərəfindən verilir 10 May '10 10:48 2018-05-10 10:48

Bir neçə dəfə Random bir surətini istifadə edin.

 // Somewhat better code... Random rng = new Random(); for (int i = 0; i < 100; i++) { Console.WriteLine(GenerateDigit(rng)); } ... static int GenerateDigit(Random rng) { // Assume there'd be more logic here really return rng.Next(10); } 

Bu məqalədə şansın çoxlu problemlərə səbəb olduğunu və onları necə həll edəcəyini izah edir. http://csharpindepth.com/Articles/Chapter12/Random.aspx

0
14 июня '18 в 15:08 2018-06-14 15:08 cavab Ankit Agarwal tərəfindən 14 İyun 18: 15:08 2018-06-14 15:08 tarixində verilir

Aşağıdakılardan istifadə edərək, təsadüfi başlanğıc dəyərlə cəhd edə bilərsiniz:

 var rnd = new Random(11111111); //note: seed value is 11111111 string randomDigits = rnd.Next().ToString().Substring(0, 8); var requestNumber = $"SD-{randomDigits}"; 
0
22 апр. Cavab Rejwanul Reja 22 Aprel verilir 2018-04-22 13:55 '18 saat 13:55 'da 2018-04-22 13:55

Təsadüfi ədəd yaratmaq üçün bu sadə addımları nəzərdən keçirin:

Fəaliyyət yarat:

 private int randomnumber(int min, int max) { Random rnum = new Random(); return rnum.Next(min, max); } 

Təsadüfi nömrələri istifadə etmək istədiyiniz yerdə yuxarıdakı funksiyanı istifadə edin. Bir mətn sahəsində istifadə etmək istədiyiniz olduğunu düşünürəm.

 textBox1.Text = randomnumber(0, 999).ToString(); 

0 minimum, 999 maksimumdur. Qiymətləri istədiyiniz nə qədər dəyişə bilərsiniz.

0
09 сент. Hani Mehdi tərəfindən verilmiş 09 sentyabr 2015-09-09 04:16 '15 'da 4:16' de, 2015-09-09 04:16

Mən həmişə müxtəlif məqsədlərlə kömək edən təsadüfi ədədlər yaratan metodlara sahibəm. Ümid edirəm ki, bu da sizə kömək edə bilər:

 public class RandomGenerator { public int RandomNumber(int min, int max) { Random random = new Random(); return random.Next(min, max); } public string RandomString(int size, bool lowerCase) { StringBuilder builder = new StringBuilder(); Random random = new Random(); char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } if (lowerCase) return builder.ToString().ToLower(); return builder.ToString(); } } 
0
15 мая '18 в 10:50 2018-05-15 10:50 Cavab PatsonLeaner tərəfindən 15 may 1818 ' də 10:50 2018-05-15 10:50' də verilir

int randomNumber = Random.Range(start_range, end_range) etməyin?

0
19 марта '16 в 19:57 2016-03-19 19:57 Cavabın cavabı 19 Mart 'da, saat 19:57' da 2016-03-19 19:57

Ümid edirəm ki, bu kod faydalı ola bilər.

  public static string GeneratePassword() { string strPwdchar = "abcdefghijklmnopqrstuvwxyz0123456789#+@ string strPwd = ""; Random rnd = new Random(); for (int i = 0; i <= 7; i++) { int iRandom = rnd.Next(5, strPwdchar.Length - 1); strPwd += strPwdchar.Substring(iRandom, 1); } return strPwd; } 

Onunla oynayır ... Ümid edirəm ki, istədiyinizi əldə edə bilərsiniz.

-1
03 дек. Cavab verilir ispostback 03 dec. 2017-12-03 05:20 '17 saat 05:20 'də 2017-12-03 05:20

Təəssüf ki, OP təsadüfi int dəyərini tələb edir, amma təsadüfi BigInteger dəyərini istəyirsinizsə, məlumat paylaşmağın sadə məqsədi üçün aşağıdakı ifadəni istifadə edə bilərsiniz:

 BigInteger randomVal = BigInteger.Abs(BigInteger.Parse(Guid.NewGuid().ToString().Replace("-",""), NumberStyles.AllowHexSpecifier)); 
-1
08 дек. Ciro Corvino tərəfindən verilmiş cavab 08 Dek 2018-12-08 17:38 '18 'də 5:38' də 2018-12-08 17:38 'də

Mən aşağıda göstərildiyi kimi vahid şəkildə paylanmış təsadüfi saylı generator istərdiniz. C # və C ++ daxil olmaqla ən çox proqramlaşdırma dillərində rastgele ədədlər istifadə etməzdən əvvəl düzgün şəkildə qarışdırılmır. Bu, eyni sayda təkrar-təkrar alacaqsınız, bu, həqiqətən, təsadüf deyil. Yenə də eyni sayını təkrar çəkməmək üçün bir toxuma ehtiyacınız var. Bir qayda olaraq, zaman içərisində olan bu vəzifə üçün yaxşıdır. Eyni toxumu hər dəfə istifadə edərkən eyni sayda təkrar-təkrar alacaqsınız. Belə ki, hər zaman müxtəlif toxumlardan istifadə etməyə çalışın. Zaman toxum üçün yaxşı bir qaynaqdır, çünki həmişə səhv edirlər.

 int GetRandomNumber(int min, int max) { Random rand = new Random((int)DateTime.Now.Ticks); return rand.Next(min, max); } 

normal bir dağılım üçün təsadüfi sayda generator axtarırsan, Box-Muller dönüşümünü istifadə edə bilərsiniz. Təsadüfi Gauss dəyişənliyi ilə bağlı yoyoyoyosef cavabını yoxlayın. Bir tamsayıya ehtiyacınız olduğundan, sonunda sonunda bir cüt dəyər əlavə etməlisiniz.

 Random rand = new Random(); //reuse this if you are generating many double u1 = 1.0-rand.NextDouble(); //uniform(0,1] random doubles double u2 = 1.0-rand.NextDouble(); double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2); //random normal(0,1) double randNormal = mean + stdDev * randStdNormal; //random normal(mean,stdDev^2) 

Random Gauss dəyişənləri

-1
15 мая '18 в 0:52 2018-05-15 00:52 cavab avto9817 15 may '18 'də 0:52 2018-05-15 00:52' də verilir
  int n = new Random().Next(); 

Next() funksiyası üçün minimum və maksimum dəyərləri də verə bilərsiniz. Kimi

  int n = new Random().Next(5,10); 
-3
08 авг. Məhəmməd Aws tərəfindən verilən cavabı 08 Av 2016-08-08 12:31 '16 at 12:31 2016-08-08 12:31

Etiketlər haqqında digər suallar və ya bir sual