2010-03-03 13 views
7

से भिन्न है, मैं इस कोड का उपयोग यादृच्छिक संख्या उत्पन्न करने के लिए करता हूं।एक यादृच्छिक int संख्या बनाएं जो प्रोग्राम के पिछले रन

Random R = new Random(0); 
int Rand = R.Next(7); 

लेकिन मुझे प्रोग्राम के प्रत्येक भाग में एक ही यादृच्छिक संख्या मिलती है।

+1

बीज अपने यादृच्छिक संख्या जनरेटर – vladr

+2

एक सुविधा है, न कि एक बग :) –

+0

और बस एक तरफ ध्यान दें कि: 'का एक बीज 0' है सबसे पीआरएनजी में सबसे अच्छा बचा है। कुछ कार्यान्वयन इसके आसपास काम करते हैं लेकिन आपको उस पर भरोसा नहीं करना चाहिए। अनचेक के लिए – Joey

उत्तर

10

हर बार जब आप अपना प्रोग्राम चलाते हैं तो आपको अपने यादृच्छिक संख्या जनरेटर ऑब्जेक्ट के बीज को बदलना होगा, जैसा कि मैंने आपके द्वारा देखा है उदाहरण के लिए, आपका वर्तमान बीज 0 है, इसलिए यदि आप चाहें तो इसे किसी अन्य चीज़ में बदलना होगा यादृच्छिक संख्या की एक अलग धारा प्राप्त करने के लिए ... बस एक विचार!

0

अपने पीआरएनजी के शुरुआती बीज के रूप में समय का उपयोग करें।

0

आपको रैंडम क्लास को 0 से अधिक परिवर्तनीय के साथ बीज करने की आवश्यकता है। मैं आमतौर पर DataTime.Now.Ticks का उपयोग करता हूं या आप एक नए ग्रिड के पूर्णांक मान का उपयोग कर सकते हैं।

0

आपको यादृच्छिक जनरेटर को बीज करने की आवश्यकता है। आप निम्नानुसार उपयोग कर सकते हैं:

रैंडम आर = नया रैंडम (डेटटाइम.अब। मिलिसेकंड);

int Rand = R.Next (7);

3

एक गैर-निरंतर मान का उपयोग करके अपने (छद्म) -रैंडम जनरेटर को बीज करें, उदा। वर्तमान समय और दिनांक:

Random R = new Random(DateTime.Now.Ticks); 

pseudo-random generators at Wikipedia के बारे में और पढ़ें।

+0

+1 - यह मेरे लिए एक नया है। – Paddy

+0

दस्तावेज़ों में 'उदाहरण' अनुभाग देखें http://msdn.microsoft.com/en-us/library/ctssatww.aspx – vladr

+1

बिल्कुल आवश्यक नहीं है, पैरामीटर रहित कन्स्ट्रक्टर स्वचालित रूप से समय आधारित बीज मान लेता है – Marek

13

कन्स्ट्रक्टर से 0 को हटाएं और आपको विभिन्न यादृच्छिक संख्याएं मिलेंगी।

यदि आप कन्स्ट्रक्टर को कोई संख्या पास करते हैं तो इसे बीज के रूप में उपयोग किया जाता है, हमेशा 0 निर्दिष्ट करके आप हमेशा एक ही अनुक्रम प्राप्त करेंगे।

आप एक int32 जो यादृच्छिक है निर्दिष्ट कर सकते हैं, लेकिन सबसे आसान बस किसी भी पैरामीटर पारित नहीं करने के लिए है और आप एक timebased बीज

+0

+1 स्पष्ट सुझाव देने वाला एकमात्र; पैरामीटर रहित कन्स्ट्रक्टर का उपयोग करने के लिए। – Guffa

0

रैंडम संख्या जनरेटर पिछले संख्या के आधार पर आप एक नए 'यादृच्छिक' मूल्य उत्पन्न मिलता है। बीज इसके लिए प्रारंभिक मूल्य है।

उसी मान के साथ सीडिंग (जैसे आपके उदाहरण कोड में 0) मूल रूप से यादृच्छिक संख्या जनरेटर को प्रत्येक बार एक ही नंबर से शुरू करने के लिए कहता है। हर बार उत्पन्न एक ही यादृच्छिक संख्या होने का मतलब है कि आपका कोड पुनरारंभ करने योग्य हो जाता है। उदाहरण: सिमुलेशन बदलते पैरामीटर के साथ सिमुलेशन को पुनरारंभ करने के लिए इसका उपयोग करते हैं, लेकिन उसी 'डेटा सेट' के साथ।

एक और उदाहरण:

मैं अपने आप को एक प्रेरक संदेश प्रत्येक दिन भेजना चाहते हैं। कभी-कभी संदेश खराब होते हैं। स्क्रिप्ट को फिर से शुरू करने में सक्षम होने के कारण, एक ही संदेश को एक दिन के दौरान बार-बार उत्पादन करना, इस सरल को ठीक करना बनाता है। पर्ल कोड में इसका मतलब है:

# By initialising the random generator with the day number since 
# the epoch, we get the same quote during one day. 
srand(time()/(24*3600)); 
my $i = int(rand(@messages)); 

आप अलग नंबरों हर बार निर्माण करने के लिए चाहते हैं, तो आप कुछ यादृच्छिक को यह बीज सेट करना होगा। विकल्प कई हैं, जैसे कि समय, पीआईडी, उपयोगकर्ता द्वारा दो कीस्ट्रोक के बीच देरी, ईथरनेट इंटरफ़ेस से व्युत्पन्न कुछ मूल्य, या time*PID जैसे उपरोक्त संयोजन की अधिक संभावना है।

आशा है कि यह यादृच्छिक संख्या बीज मूल्य की अवधारणा के पीछे विचार को स्पष्ट करे।

0

अगर हम 1 और 100 के बीच एक यादृच्छिक संख्या कोड इस प्रकार दिखाई देगा हैं: RandomNumberGenerator.GetRandomInt (1, 100)

0

सबसे सुरक्षित तरीका यादृच्छिक संख्या उत्पन्न करने के लिए System.Security उपयोग करने के लिए है। Cryptography.RandomNumberGenerator कक्षा।

यहां एक उदाहरण है जो 1 और 100 के बीच एक संख्या उत्पन्न करेगा;

public Number Rand() 
{ 

    byte[] Salt = new byte[8]; 

    System.Security.Cryptography.RandomNumberGenerator.Create().GetBytes(Salt); 

    decimal result = 0; 

    foreach (byte b in Salt) 
{ 

    result = result * 255 + b; 

} 

while (result > 100) 

{ 

    result /= 10; 

} 

return result 

}

0

पूरा कोड:

public static class RandomHelper 
{ 
    static object _myLock = new object(); 
    static Random _random = new Random(); 

    public static int RandomNumber(int min, int max) 
    { 

     lock (_myLock) 
     { 
      if (min == max) 
       return min; 

      if (min > max) 
       return _random.Next(max, min); 

      return _random.Next(min, max); 
     } 

} 
संबंधित मुद्दे