को वास्तव में क्या आप मतलब है "दोहराया नहीं जाना चाहिए"? यदि आपका मतलब है कि आप कोई डुप्लीकेट नहीं प्राप्त करना चाहते हैं, तो आपको मूल रूप से संख्या 1-20 की सूची लेनी चाहिए, उन्हें घुमाएं, और फिर सूची के शीर्ष से एक समय में एक को पकड़ लें। सूची को घुमाने के लिए एक कुशल तरीके से, this Stack Overflow answer देखें।
तुम सिर्फ मतलब है कि आपके वर्तमान प्रयास देता है 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 आदि तो संभावना है कि आप प्रत्येक बार जब कोई संख्या चुनते हैं तो Random
का एक नया उदाहरण बना रहे हैं: ऐसा न करें। प्रत्येक बार जब आप एक उदाहरण बनाते हैं, तो यह वर्तमान समय का उपयोग यादृच्छिक संख्या जनरेटर के लिए "बीज" के रूप में करेगा (जब तक कि आप एक स्पष्ट रूप से निर्दिष्ट नहीं करते)। इसका मतलब है कि यदि आप त्वरित उत्तराधिकार में कई उदाहरण बनाते हैं, तो प्रत्येक को एक ही बीज मिल जाएगा और इसलिए संख्याओं का एक ही अनुक्रम दें।
इसके बजाय, Random
के एक उदाहरण का उपयोग करें और इसका पुन: उपयोग करें। (ध्यान दें कि यह धागा सुरक्षित नहीं है, हालांकि, जो एक दर्द है।) उदाहरण के लिए:
private static readonly Random Rng = new Random();
public int NextNumber()
{
return Rng.Next(20) + 1;
}
कि धागे की सुरक्षित नहीं होगा, लेकिन हमें पता है कि अगर कोई समस्या है करते हैं। एक वैकल्पिक कभी कभी (बेशक, जो आम तौर पर और अधिक जटिल हो जाएगा) विधि में Random
पारित करने के लिए है:
public int NextNumber(Random rng)
{
return rng.Next(20) + 1;
}
तो फोन करने वाले को उचित रूप से उदाहरण के पुन: उपयोग कर सकते हैं।
यदि आप यादृच्छिक संख्याएं उत्पन्न करने का थ्रेड-सुरक्षित तरीका चाहते हैं, तो आप कक्षा MiscUtil में देख सकते हैं।
(ध्यान दें कि rng.Next(1, 21)
का उपयोग कर भी ठीक काम करेगा - मैं ऊपर के रूप में मुझे लगता है कि यह समावेशी/विशेष सीमाओं के बारे में अटकलबाजी कम कर देता है संस्करण को प्राथमिकता के लिए हो, लेकिन यह व्यक्तिगत स्वाद की बात है।)
आप कृपया इस प्रश्न के लिए सही उत्तर का चयन होगा? –