C # का उपयोग करके किसी श्रेणी में एक यादृच्छिक संख्या उत्पन्न करें


266

मैं एक सीमा के भीतर यादृच्छिक संख्याओं के उत्पादन के बारे में कैसे जा सकता हूं?

जवाबों:


418

तुम कोशिश कर सकते हो

Random r = new Random();
int rInt = r.Next(0, 100); //for ints
int range = 100;
double rDouble = r.NextDouble()* range; //for doubles

अच्छी तरह से देखिए

रैंडम क्लास , रैंडमNext मेथड (Int32, Int32) और रैंडम। NextDouble Method


30
बस एक नोट जोड़ने के लिए, यदि आप NextDouble () का उपयोग कर रहे हैं और यह नहीं चाहते हैं कि निचली सीमा शून्य हो। आप उच्च बाउंड और लोअर बाउंड के बीच के अंतर से गुणा करते हैं, फिर निचले बाउंड और शून्य के बीच का अंतर जोड़ते हैं। तो 1 से 1 के लिए double rDouble = (r.NextDouble()*2)-1.0;
टॉम हार्ट

2
या -1.0 और 1.0 की सीमा में एक सरलीकृत डबल जनरेटर: डबल रैंडड डबल = नया रैंडम ()। अगला (-100, 100) / 100.0D;
BoiseBaked

1
Random()समय-निर्भर बीज का उपयोग करता है, लेकिन यह स्पष्ट रूप से लिखना कि पठनीयता के लिए बेहतर है।
इवगेनी सर्गेव

44

कोड के नीचे प्रयास करें।

Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51

34

कुछ इस तरह:

var rnd = new Random(DateTime.Now.Millisecond);
int ticks = rnd.Next(0, 3000);

2
के लिए क्या है DateTime.Now.Millisecond?
हेल

1
आपको इसे शुरू करने के लिए कुछ करने की आवश्यकता है ...... रैंडम ऑब्जेक्ट बस आपके द्वारा दिए गए मूल्य पर बहुत सारे गणित करता है, और एक तरह से ऐसा करता है कि उसी रैंडम ऑब्जेक्ट पर नेक्स्ट () के प्रत्येक कॉल का परिणाम होगा पिछले कॉल के लिए एक यादृच्छिक मूल्य में। परिणाम को अलग-अलग यादृच्छिक वस्तुओं में अधिक यादृच्छिक बनाने के लिए , आप एक अलग संख्या से शुरू करते हैं - यहाँ, DateTime.Now.Millisecond। यदि आप बदलते मूल्य के बजाय एक स्थिरांक रखते हैं, तो आपको .Next () से समान परिणाम प्राप्त होंगे।
माइक एम

12
Randomपहले से ही एक सिस्टम मूल्य के साथ वरीयता प्राप्त है, और Millisecondकेवल 0 और 999 के बीच की एक संख्या है। यदि लाइनों की यह जोड़ी हमेशा कोड में एक साथ होती थी, rnd.Nextतो बीज के हर बार रीसेट होने के कारण केवल 1000 संभावित मान होंगे । एक ही बीज में, एक ही यादृच्छिक संख्या बाहर। मैं मैनुअल बीज बाहर छोड़ दूँगा।
जॉन मैकडॉनल्ड्स

@ जॉनमोन्डोनाल्ड, आप सही हैं। बस सटीक होने के लिए, इसके साथ आरंभ किया जाता है Environment.TickCount
पराग मेश्राम

11

उपयोग:

Random r = new Random();
 int x= r.Next(10);//Max range

2
यह एक श्रेणी निर्दिष्ट नहीं करता है।
विंगर सेंडॉन

1
आप एक यादृच्छिक श्रेणी प्राप्त करने के लिए बस लोअर_वल्यू + आर.नेक्स्ट (10) करते हैं।
ऑस्टिन सालगाट

6

भविष्य के पाठकों के लिए यदि आप एक श्रेणी में एक यादृच्छिक संख्या चाहते हैं तो निम्न कोड का उपयोग करें:

public double GetRandomNumberInRange(double minNumber, double maxNumber)
{
    return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
}

मिनट और अधिकतम के बीच सी # यादृच्छिक डबल

कोड नमूना


2
फॉर्मूला निम्नलिखित तरीके से होना चाहिए:return new Random().NextDouble() * (maxNumber - minNumber) + minNumber;
फ्रैंक सेबस्टी

3

रैंडम क्लास के अलावा , जो पूर्णांक और युगल उत्पन्न करता है, पर विचार करें:


3

यहाँ Darrelk उत्तर से अद्यतन संस्करण है । इसे C # एक्सटेंशन विधियों का उपयोग करके लागू किया गया है । यह है स्मृति को आबंटित नहीं ( नई यादृच्छिक () ) हर बार इस विधि कहा जाता है।

public static class RandomExtensionMethods
{
    public static double NextDoubleRange(this System.Random random, double minNumber, double maxNumber)
    {
        return random.NextDouble() * (maxNumber - minNumber) + minNumber;
    }
}

उपयोग (उन नामों को आयात करना सुनिश्चित करें जिनमें रैंडम एक्स्टेंशनमेथोड्स क्लास शामिल हैं):

var random = new System.Random();
double rx = random.NextDoubleRange(0.0, 1.0);
double ry = random.NextDoubleRange(0.0f, 1.0f);
double vx = random.NextDoubleRange(-0.005f, 0.005f);
double vy = random.NextDoubleRange(-0.005f, 0.005f);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.