दिलचस्प पोस्ट
क्या आप अतिरिक्त स्कोपिंग के लिए घुंघराले ब्रेसिज़ का उपयोग करते हैं? जावा डबल परिशुद्धता राशि मुसीबत Android FileInputStream स्ट्रिंग में () txt फ़ाइल को पढ़ें सी ++ 11 में टी एंड ए (डबल एम्परसेंड) क्या होता है? सुरक्षित एसक्यूएल नामों का उपयोग कैसे करें? (पायथन) इसे स्थापित करने के बजाय स्थानीय स्तर पर एक पुस्तकालय का उपयोग करें एंड्रॉइड एनडीके प्रोजेक्ट में प्रीबिल्ल्ट साझा लाइब्रेरी कैसे लिंक करें? एंड्रॉइड में बड़ी छवियों को कैसे लोड करें और स्मृति त्रुटि से बाहर निकलते हैं? फ्लास्क व्यू से सीएसवी फ़ाइल बनाएं और डाउनलोड करें जावा 8 स्ट्रीम: एकाधिक फ़िल्टर बनाम जटिल स्थिति jquery फ़िल्टरिंग + नहीं है .net 4 सी # के भीतर से फ़ाइल को अनवरोधित करें क्यों लैम्ब्डा काम करता है सी ++ 11 में फ़ंक्शन <> प्रकार नहीं है? अपाचे स्पार्क और अपाचे फ्लिंक में क्या अंतर है? एक ArrayList के अंतिम मान कैसे प्राप्त करें

रैंडम। अगला () हमेशा एक ही नंबर क्यों वापस करता है

इस विधि पर विचार करें:

private static int GenerateRandomNumber(int seed, int max) { return new Random(seed).Next(max); } 

मेरी मशीन पर, इस पाश को निष्पादित करने से 1500 पुनरावृत्तियों के माध्यम से एक ही नंबर पैदा होता है:

  for (int i = 0; i < 1501; i++) { int random = GenerateRandomNumber(100000000, 999999999); Console.WriteLine(random.ToString()); Console.ReadKey(); } 

मुझे 145156561 मिलता है, हर एक यात्रा के लिए।

मेरे पास कोई दिक्कत नहीं है, मैं सिर्फ इस व्यवहार के बारे में उत्सुक था क्योंकि। अगला (अधिकतम) कहते हैं, "निर्दिष्ट अधिकतम से कम एक गैर नकारात्मक यादृच्छिक संख्या देता है। शायद मैं कुछ बुनियादी समझ नहीं रहा हूँ।

Solutions Collecting From Web of "रैंडम। अगला () हमेशा एक ही नंबर क्यों वापस करता है"

आप हमेशा एक ही बीज के साथ एक नया उदाहरण बीज बोने वाले हैं, और फिर सबसे पहले अधिकतम कब्जाने। बीज का उपयोग करके, आप उसी परिणाम की गारंटी ले रहे हैं।

यदि आप एक स्थैतिक, यादृच्छिक संख्या पीढ़ी चाहते हैं जो अलग-अलग परिणाम करता है, तो आपको इसे थोड़ा सा दोबारा शुरू करना चाहिए। हालांकि, चूंकि रैंडम थ्रेडसेफ नहीं है, इसलिए इसे स्थैतिक रूप से उपयोग किए जाने पर कुछ सिंक्रनाइज़ेशन की आवश्यकता होती है। कुछ इस तरह:

 private static Random random; private static object syncObj = new object(); private static void InitRandomNumber(int seed) { random = new Random(seed); } private static int GenerateRandomNumber(int max) { lock(syncObj) { if (random == null) random = new Random(); // Or exception... return random.Next(max); } } 

दिलबर्ट को 2001 में उसी समस्या का सामना करना पड़ा:

http://dilbert.com/strips/comic/2001-10-25/

संयोग?

मुझे ऐसा नहीं लगता।

और random.org सहमत हैं: http://www.random.org/analysis/

समस्या यह है कि आप प्रत्येक बार उसी बीज संख्या के साथ एक नया यादृच्छिक उदाहरण बना रहे हैं। आपको एक एकल यादृच्छिक उदाहरण बनाना चाहिए (यदि आवश्यक हो तो उसे स्थिर में रखें) और उसी उदाहरण पर अगली विधि को कॉल करें।

यादृच्छिक संख्या पीढ़ी वास्तव में यादृच्छिक नहीं है, अधिक जानकारी के लिए यह विकिपीडिया प्रविष्टि देखें।

छद्म यादृच्छिक संख्या जनरेटर आमतौर पर एक बीज का चयन करके काम करते हैं, और उसके बाद उस बीज के आधार पर एक निर्धारक अनुक्रम उत्पन्न करते हैं। हर बार एक ही बीज का चयन, आप एक ही क्रम उत्पन्न करते हैं।

.NET में "केवल" 2 ^ 32 विभिन्न यादृच्छिक दृश्य हैं।

सुनिश्चित नहीं कि आंतरिक कैसे काम करता है .. इसके लिए विकी की जांच करें, लेकिन यह बहुत आसान है।

 public class MathCalculations { private Random rnd = new Random(); public Int32 getRandom(Int32 iMin, Int32 iMax) { return rnd.Next(iMin, iMax); } } public class Main { MathCalculations mathCalculations = new MathCalculations(); for (int i = 0; i < 6; i++) { getRandom(0,1000); } } 

नंबर 1, नंबर 2, नंबर 3, नंबर 4, नंबर 5, नंबर 6 (1 बीड, कई संख्याओं का 1 अनुक्रम, यादृच्छिक * वास्तव में नहीं, लेकिन लगभग। * उत्पन्न करेगा)

यदि आप ऐसा करते हैं:

 public class MathCalculations { public Int32 getRandom(Int32 iMin, Int32 iMax) { Random rnd = new Random(); return rnd.Next(iMin, iMax); } } public class Main { MathCalculations mathCalculations = new MathCalculations(); for (int i = 0; i < 6; i++) { getRandom(0,1000); } } 

अब आपको संख्या 1, संख्या 1, संख्या 1, संख्या 1, संख्या 1, संख्या 1 (1 बीज, कई अंकों के 6 बराबर दृश्य, हमेशा प्रत्येक समान अनुक्रम से एक ही शुरुआती संख्या चुनें) मिलेंगे। कुछ बिंदु पर नंबर 1 अलग होगा, क्योंकि बीज समय के साथ परिवर्तन .. लेकिन आपको इसके लिए कुछ समय प्रतीक्षा करने की ज़रूरत है, फिर भी, आप क्रम से नंबर 2 कभी नहीं उठाते हैं।

इसका कारण यह है कि हर बार जब आप एक ही सीड के साथ एक नया अनुक्रम उत्पन्न करते हैं, तो अनुक्रम एक बार फिर से होता है, और हर बार जब आपका यादृच्छिक जनरेट किया जाता है, तो यह क्रम के पहले नंबर को लेगा, जो कि एक ही बीज के साथ होता है बेशक हमेशा एक ही

सुनिश्चित नहीं हैं कि यह यादृच्छिक जनरेटर के अंतर्निहित तरीकों से तकनीकी रूप से सही है, लेकिन ऐसा ही व्यवहार करता है।

सभी को सलाम, अच्छा, उसने मुझे भी पागल कर दिया। उत्तर सीधा है। यादृच्छिक उत्पन्न होने से पहले बीज बदलें।

उदाहरण: मैं 1 से 10 के बीच यादृच्छिक संख्या उत्पन्न करना चाहता हूं

 Random rnd = new Random(DateTime.Now.Seconds); int random_number = rnd.Next(10); 

इसे एक पाश के अंदर रखें और इसे तीन बार चलाएं यह 10 से नीचे यादृच्छिक संख्या देगा।

इस घटना में कि कोई भी "त्वरित और गंदे" "समाधान" (और मैं सावधानी के साथ उस शब्द का उपयोग करता है) की तलाश में है, तो यह अधिकतर के लिए पर्याप्त होगा

 int secondsSinceMidnight = Convert.ToInt32(DateTime.Now.Subtract(DateTime.Today).TotalSeconds); Random rand = new Random(secondsSinceMidnight); var usuallyRandomId = rand.Next(); 

कृपया ध्यान दें कि मेरा आमतौर पर यादृच्छिक उपयोग है मैं मानता हूं कि जवाब के रूप में चिह्नित आइटम यह करने का एक और सही तरीका है।