সি # ব্যবহার করে একটি পরিসরে একটি এলোমেলো সংখ্যা তৈরি করুন


266

আমি একটি ব্যাপ্তির মধ্যে এলোমেলো সংখ্যা উত্পাদন সম্পর্কে কীভাবে যেতে পারি?

উত্তর:


418

আপনি চেষ্টা করতে পারেন

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

একটু দেখো

র‌্যান্ডম ক্লাস , র‌্যান্ডম.নেক্সট পদ্ধতি (ইন্ট 32, ইন্ট 32) এবং এলোমেলো.নেক্সটডউবল পদ্ধতি


30
কেবলমাত্র একটি নোট যুক্ত করতে, আপনি যদি নেক্সটডুবল () ব্যবহার করছেন এবং নীচের সীমাটি শূন্য হতে চান না। আপনি উচ্চতর বাউন্ড এবং নিম্ন সীমাটির মধ্যে পার্থক্য দ্বারা গুন করেন, তারপরে নিম্ন সীমা এবং শূন্যের মধ্যে পার্থক্য যুক্ত করুন। সুতরাং -1 থেকে 1 double rDouble = (r.NextDouble()*2)-1.0;
টম হিয়ার্ড

2
বা -1.0 এবং 1.0 এর ব্যাপ্তিতে একটি সরলিকৃত ডাবল জেনারেটর: ডাবল র‌্যান্ডডুবলওয়াই = নতুন র‌্যান্ডম () পরবর্তী (-100, 100) / 100.0D;
বোইসবেড

1
Random()একটি সময়-নির্ভর বীজ ব্যবহার করে, তবে স্পষ্টভাবে লিখতে পঠনযোগ্যতার পক্ষে ভাল।
এভেজেনি সার্জিভ 10'19

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
এটির শুরু করার জন্য আপনাকে কিছু স্থাপন করতে হবে ...... র্যান্ডম অবজেক্ট আপনার দেওয়া মানটির উপর সহজেই প্রচুর পরিমাণে গণিত করে এবং এমনভাবে করে যাতে একই র্যান্ডম অবজেক্টে নেক্সট () এর প্রতিটি কল ফলাফল হয় পূর্ববর্তী কল থেকে এলোমেলো একটি মান। ফলাফলটি বিভিন্ন এলোমেলো বস্তুগুলিকে আরও এলোমেলো করতে আপনি একটি আলাদা সংখ্যা দিয়ে শুরু করুন - এখানে, ডেটটাইম.নো.মিলিসেকেন্ড। যদি আপনি পরিবর্তিত মানের পরিবর্তে ধ্রুবক রাখেন, আপনি .Nxt () থেকে একই ফলাফল পাবেন।
মাইক এম

12
Randomইতিমধ্যে একটি সিস্টেম মান বীজযুক্ত করা হয়, এবং Millisecondশুধুমাত্র 0 এবং 999. এর মধ্যে একটি সংখ্যা যদি লাইনের এই যুগল কোডে সবসময় একসাথে ছিল, সেখানে মাত্র 1000 সম্ভাব্য মান হতে হবে rnd.Nextবীজ হচ্ছে কারণে প্রতিটি সময় পুনরায় সেট করুন। একই বীজ, একই এলোমেলো সংখ্যা। আমি ম্যানুয়াল বীজ ছেড়ে দেব
জন ম্যাকডোনাল্ড

@ জনম্যাকডোনাল্ড, আপনি সঠিক বলেছেন। সুনির্দিষ্টভাবে বলতে গেলে এটি দিয়ে শুরু করা হয়েছে Environment.TickCount
পরাগ মেশরাম


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

ড্যারালেক উত্তর থেকে আপডেট সংস্করণ এখানে । এটি সি # এক্সটেনশন পদ্ধতি ব্যবহার করে প্রয়োগ করা হয় । প্রতিবার এই পদ্ধতিটি বলা হওয়ার পরে এটি মেমোরি ( নতুন র‌্যান্ডম () ) বরাদ্দ করে না

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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.