C# में यादृच्छिक पूर्णांक संख्या कैसे उत्पन्न करें: एक बार और हमेशा के लिए समझें
\nयादृच्छिक संख्याओं के जनन का प्रश्न Stack Overflow पर सबसे लोकप्रिय में से एक है। लगता है, इससे आसान क्या हो सकता है? लेकिन व्यवहार में, अनुभवी डेवलपर्स भी C# में क्लासिक गलतियाँ करते हैं: हर बार चलाने पर समान मान प्राप्त करना, गैर-यादृच्छिक अनुक्रमों का सामना करना, या थ्रेड-सुरक्षा के बारे में भूल जाना। आज हम एक बार और हमेशा के लिए समझेंगे कि C# में यादृच्छिक पूर्णांक संख्याओं को सही तरीके से कैसे उत्पन्न किया जाए, और Stack Overflow के उस शीर्ष प्रश्न के सभी 'क्यों' का उत्तर देंगे।
\n\nयह लेख आपका मौका है इंटरनेट से कोड कॉपी करना बंद करने और वास्तव में समझने का कि System.Random के अंदर क्या होता है। चलिए शुरू करते हैं!
शुरुआती लोगों को बार-बार एक ही संख्या क्यों मिलती है?
\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 इंस्टेंस बनाते हैं, तो उन्हें एक ही 'सीड' मिलता है, और इसलिए वे समान अनुक्रम उत्पन्न करते हैं।
सही समाधान है एक 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\nRandom.Next(): यादृच्छिक पूर्णांक प्राप्त करने के तीन तरीके
\nक्लास System.Random विधि Next() के तीन ओवरलोड प्रदान करता है। आइए प्रत्येक को उदाहरणों के साथ देखें:
1. Random.Next() — बिना पैरामीटर के
\n0 से Int32.MaxValue - 1 तक की सीमा में एक गैर-ऋणात्मक पूर्णांक लौटाता है। यानी 0 से 2,147,483,646 तक।
Random rnd = new Random();\nint anyNumber = rnd.Next();\nConsole.WriteLine(anyNumber); // उदाहरण: 1789034215\n\n\n2. Random.Next(Int32) — ऊपरी सीमा के साथ
\n0 (सम्मिलित) से निर्दिष्ट अधिकतम (अनन्य) तक एक संख्या लौटाता है।
\nint dice = rnd.Next(7); // 0, 1, 2, 3, 4, 5 या 6\nConsole.WriteLine(dice);\n\n\n3. 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) लिखें।
C# में Random के साथ शीर्ष-3 गलतियाँ
\nStack 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