C# में यादृच्छिक संख्याओं का जनन: शुरुआत से विशेषज्ञ तक (Stack Overflow के शीर्ष प्रश्न का समाधान)

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में यादृच्छिक पूर्णांक संख्या कैसे उत्पन्न करें: एक बार और हमेशा के लिए समझें

\n

यादृच्छिक संख्याओं के जनन का प्रश्न Stack Overflow पर सबसे लोकप्रिय में से एक है। लगता है, इससे आसान क्या हो सकता है? लेकिन व्यवहार में, अनुभवी डेवलपर्स भी C# में क्लासिक गलतियाँ करते हैं: हर बार चलाने पर समान मान प्राप्त करना, गैर-यादृच्छिक अनुक्रमों का सामना करना, या थ्रेड-सुरक्षा के बारे में भूल जाना। आज हम एक बार और हमेशा के लिए समझेंगे कि C# में यादृच्छिक पूर्णांक संख्याओं को सही तरीके से कैसे उत्पन्न किया जाए, और Stack Overflow के उस शीर्ष प्रश्न के सभी 'क्यों' का उत्तर देंगे।

\n\n

यह लेख आपका मौका है इंटरनेट से कोड कॉपी करना बंद करने और वास्तव में समझने का कि System.Random के अंदर क्या होता है। चलिए शुरू करते हैं!

\n\n

शुरुआती लोगों को बार-बार एक ही संख्या क्यों मिलती है?

\n

सबसे सामान्य प्रश्न: "मैं Random बनाता हूँ और हमेशा एक ही संख्या मिलती है!"। आइए एक विशिष्ट जाल-कोड देखें:

\n\n
// ❌ खराब उदाहरण\nfor (int i = 0; i < 5; i++)\n{\n    Random rnd = new Random();\n    Console.WriteLine(rnd.Next(1, 100));\n}\n
\n\n

यह कोड क्या आउटपुट देगा? 99% संभावना है कि पाँच समान संख्याएँ। क्यों? क्योंकि Random आरंभीकरण (seed) के लिए सिस्टम क्लॉक का उपयोग करता है। जब आप लगातार कई Random इंस्टेंस बनाते हैं, तो उन्हें एक ही 'सीड' मिलता है, और इसलिए वे समान अनुक्रम उत्पन्न करते हैं।

\n\n

सही समाधान है एक Random इंस्टेंस बनाना और उसका बार-बार उपयोग करना:

\n\n
// ✅ सही उदाहरण\nRandom rnd = new Random();\nfor (int i = 0; i < 5; i++)\n{\n    Console.WriteLine(rnd.Next(1, 100));\n}\n
\n\n

अब प्रत्येक संख्या अलग होगी। सरल नियम: प्रति निष्पादन थ्रेड में एक Random।

\n\n

Random.Next(): यादृच्छिक पूर्णांक प्राप्त करने के तीन तरीके

\n

क्लास System.Random विधि Next() के तीन ओवरलोड प्रदान करता है। आइए प्रत्येक को उदाहरणों के साथ देखें:

\n\n

1. Random.Next() — बिना पैरामीटर के

\n

0 से Int32.MaxValue - 1 तक की सीमा में एक गैर-ऋणात्मक पूर्णांक लौटाता है। यानी 0 से 2,147,483,646 तक।

\n
Random rnd = new Random();\nint anyNumber = rnd.Next();\nConsole.WriteLine(anyNumber); // उदाहरण: 1789034215\n
\n\n

2. Random.Next(Int32) — ऊपरी सीमा के साथ

\n

0 (सम्मिलित) से निर्दिष्ट अधिकतम (अनन्य) तक एक संख्या लौटाता है।

\n
int dice = rnd.Next(7); // 0, 1, 2, 3, 4, 5 या 6\nConsole.WriteLine(dice);\n
\n\n

3. Random.Next(Int32, Int32) — सीमा [min, max)

\n

किसी दी गई सीमा में C# यादृच्छिक पूर्णांक संख्या उत्पन्न करने के लिए सबसे लोकप्रिय विकल्प।

\n
// 1 से 100 तक यादृच्छिक संख्या (सम्मिलित)\nint score = rnd.Next(1, 101);\nConsole.WriteLine(score);\n
\n\n

याद रखना महत्वपूर्ण है: ऊपरी सीमा शामिल नहीं है। 1 से 6 तक की संख्या प्राप्त करने के लिए (जैसे पासे पर), Next(1, 7) लिखें।

\n\n

C# में Random के साथ शीर्ष-3 गलतियाँ

\n

Stack Overflow C# random पर वास्तविक प्रश्नों के आधार पर, सबसे सामान्य गलतियों पर प्रकाश डालते हैं:

\n\n
    \n
  • गलती #1: लूप में नया Random बनाना। हम पहले ही समझ चुके हैं — इससे समान संख्याएँ मिलती हैं। समाधान: new Random() को लूप के बाहर रखें।
  • \n
  • गलती #2: Random थ्रेड-सुरक्षित नहीं है। यदि कई थ्रेड बिना सिंक्रोनाइज़ेशन के एक ही Random इंस्टेंस का उपयोग करते हैं, तो विफलताएँ और शून्य मान संभव हैं। lock या ThreadLocal<Random> का उपयोग करें।
  • \n
  • गलती #3: पासवर्ड या टोकन के लिए Random का उपयोग करना। System.Random एक छद्म-यादृच्छिक जनरेटर है। यह पूर्वानुमानित है! सुरक्षा के लिए System.Security.Cryptography.RandomNumberGenerator की आवश्यकता है।
  • \n
\n\n

क्रिप्टो-सुरक्षित यादृच्छिक संख्याएँ कैसे उत्पन्न करें?

ब्लॉग

पुस्तक अनुशंसाएँ