आपके उदाहरण कोड में एक कठिन बग है: आपने 150/208
और 190/209
लिखा है। यह एक पूर्णांक विभाजन है, और दोनों परिणाम शून्य में परिणाम। आपको लिखा होगा: 150.0/208
और 190.0/209
संकलक को डबल को पूर्णांक के रूप में विभाजित करने के निर्देश देने के लिए।
संपादित करें:
मान लिया जाये कि सिस्टम के RNG सपाट है और इस प्रकार है कि अपनी मेज के रूप में:
[item] [amount]
0 3 000 000
25 1 500 000
50 2 000 000
75 300 000
100 10 000
150 10 000 (no typo)
sum = 6820000
फिर अपने randomizer देख सकते हैं जैसे:
int randomItemNumber = Random.Next(6820000); // 0..6819999
if(randomItemNumber < 3000000)
Console.WriteLine("Aah, you've won the Item type #0\n");
else if(randomItemNumber < 3000000+1500000)
Console.WriteLine("Aah, you've won the Item type #1\n");
else if(randomItemNumber < 3000000+1500000+2000000)
Console.WriteLine("Aah, you've won the Item type #2\n");
else if(randomItemNumber < 3000000+1500000+2000000+300000)
Console.WriteLine("Aah, you've won the Item type #3\n");
else if(randomItemNumber < 3000000+1500000+2000000+300000+10000)
Console.WriteLine("Aah, you've won the Item type #4\n");
else if(randomItemNumber < 3000000+1500000+2000000+300000+10000+10000)
Console.WriteLine("Aah, you've won the Item type #5\n");
else
Console.WriteLine("Oops, somehow you won nothing, the code is broken!\n");
विचार है कि आप सभी डाल है एक लूओंग लाइन में आइटम, एक के बाद एक, लेकिन आप उन्हें अपने समूहों में रखते हैं। तो, शुरुआत में पहली तरह के तीन मिलियन हैं, फिर दूसरे प्रकार के ढाई लाख और इतने पर। लाइन में कुल 6820000 आइटम हैं। अब आप यादृच्छिक रूप से 1 से 6820000 (या 0 से 6819 999 तक) संख्या चुनते हैं और इसे लाइन में किसी तत्व के NUMBER के रूप में उपयोग करते हैं।
चूंकि आइटम उनके सही सांख्यिकीय वितरण के साथ लाइन में मौजूद हैं, तो यदि यादृच्छिकरण 1-6820000 FLAT था, तो परिणामस्वरूप 'लॉटरी' में वही वितरण होगा जैसा आप चाहते थे।
एकमात्र चाल समझाने के लिए छोड़ दी गई है, यह अनुमान लगाने के लिए कि किस आइटम को चुना गया था। यही कारण है कि हमने वस्तुओं को समूहों में रखा था। 3000000 वस्तुओं का पहला भाग पहला प्रकार है, इसलिए यदि संख्या 3000000 से कम थी तो हमने पहले प्रकार को मारा। यदि उससे अधिक, लेकिन अगले 1500000 (4500000 से कम) से कम है तो दूसरा प्रकार हिट है .. और इसी तरह।
ध्वनि शायद सबसे सरल बात करने के लिए होगा "संभावनाएं" को सारांशित करें और 0 और योग (मौका) के बीच यादृच्छिक करें, फिर उस नंबर पर आने वाली वस्तु को चुनें। क्या यह सही लगता है? –
'रैंडम' क्लास में' अगला (int MaxValue) 'विधि है आपकी मदद कर सकता है। इस पर थोड़ी सी खोज करें। –