2009-09-29 17 views
20

क्या मैं किसी संख्या को चुनने के लिए बहुत दूर दिख रहा हूं: 0 या 1?यादृच्छिक संख्या: 0 या 1

 Random rand = new Random(); 

     if (rand.NextDouble() == 0) 
     { 
      lnkEvents.CssClass = "selected"; 
     } 
     else 
     { 
      lnkNews.CssClass = "selected"; 
     } 
+5

नीचे दिए गए सभी समाधान, क्या आपने एक नया रैंडम ऑब्जेक्ट बनाया है। यह ठीक है जब तक कि आप उनमें से एक गुच्छा बहुत जल्दी बनाते हैं। यदि आप करते हैं, तो एक अच्छा मौका है कि वे सभी एक ही यादृच्छिक बीज होंगे, और आप एक ही परिणाम प्राप्त करेंगे। इस मुद्दे से बचने के लिए, अपने प्रोग्राम में कहीं यादृच्छिक बनाएं और इसे पास करें। –

+0

अगला डबल दोबारा यादृच्छिक वर्ग –

उत्तर

71
Random rand = new Random(); 

if (rand.Next(0, 2) == 0) 
    lnkEvents.CssClass = "selected"; 
else 
    lnkNews.CssClass = "selected"; 

Random.Next लोअर बाउंड (सम्मिलित) और ऊपरी सीमा (अनन्य) के बीच एक यादृच्छिक पूर्णांक चुनता है।

+0

यह वह है जिसे मैं जाना चाहता हूं। – RichardOD

+8

नोट: रैंडम रैंड = नया रैंडम(); आदर्श रूप से, कहीं और अटक जाना चाहिए, रैंड पर कॉल के ठीक ऊपर नहीं। अगला। आदर्श रूप में, इसे एक बार शुरू किया जाना चाहिए। – Brian

26

आप 50/50 संभावना चाहते हैं, मेरा सुझाव है:

Random rand = new Random(); 

if (rand.NextDouble() >= 0.5) 
    lnkEvents.CssClass = "selected"; 
else 
    lnkNews.CssClass = "selected"; 
+0

में मौजूद नहीं है - वर्तमान में संभावना कहीं भी नहीं है। :-)। – RichardOD

+2

क्या डाउनवॉटर कृपया एक टिप्पणी छोड़ देगा। धन्यवाद। –

2

Random.NextDouble() 0 लेकिन 1.0 से भी कम समय से किसी भी डबल संख्या का चयन करेंगे। इनमें से अधिकतर संख्या शून्य नहीं हैं, इसलिए आपका वितरण उतना ही नहीं होगा जितना आप उम्मीद करते हैं।

+6

"जैसा भी आप उम्मीद करते हैं उतना न हो" वर्ष की कमी है। लगभग सभी जेनरेट किए गए परिणाम 1. – Godeke

+1

रिकॉर्ड के लिए: मैंने पीआरएनजी द्वारा शून्य को वापस नहीं देखा है। और मैंने उन्हें कुछ महीने पहले परीक्षण किया है :-) – Joey

3

ऐसा लगता है कि आप क्या करना चाहते हैं (दो मानों के बीच चयन करें) NextDouble विधि के बजाय Next विधि का उपयोग करके अधिक स्पष्ट रूप से व्यक्त किया गया है।

const int ExclusiveUpperBound = 2; 
if (new Random().Next(ExclusiveUpperBound) == 0) 

उत्पादन मूल्य "से अधिक या शून्य के बराबर है, और कम से कम" ExclusiveUpperBound है।

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