এলোমেলো সংখ্যা জেনারেটর কেবল একটি এলোমেলো সংখ্যা তৈরি করে


765

আমি নিম্নলিখিত ফাংশন আছে:

//Function to get random number
public static int RandomNumber(int min, int max)
{
    Random random = new Random();
    return random.Next(min, max);
}

আমি কীভাবে এটি ডাকি:

byte[] mac = new byte[6];
for (int x = 0; x < 6; ++x)
    mac[x] = (byte)(Misc.RandomNumber((int)0xFFFF, (int)0xFFFFFF) % 256);

রানটাইমের সময় আমি যদি ডিবাগারের সাথে সেই লুপটি পদক্ষেপ নিই তবে আমি বিভিন্ন মান পাই (যা আমি চাই তা) get যাইহোক, আমি যদি এই কোডের নীচে দুটি লাইন রাখি তবে macঅ্যারের সমস্ত সদস্যের সমান মান থাকে।

কেন এমন হয়?


20
ব্যবহার new Random().Next((int)0xFFFF, (int)0xFFFFFF) % 256);তুলনায় কোনো ভালো "এলোমেলো" সংখ্যা দেয় না.Next(0, 256)
bohdan_trotsenko

আপনি এই নিউগেট প্যাকেজটি সহায়ক বলে মনে করতে পারেন। এটি একটি স্ট্যাটিক Rand.Next(int, int)পদ্ধতি সরবরাহ করে যা বীজ পুনরায় ব্যবহারের সমস্যায় লক না করে বা চালানো ছাড়াই এলোমেলো মানগুলিতে স্থির অ্যাক্সেস সরবরাহ করে
চেজমেডালিয়ন

উত্তর:


1040

প্রতিবার আপনি new Random()এটি ঘড়ি ব্যবহার করে আরম্ভ করা হয়। এর অর্থ একটি শক্ত লুপে আপনি একই মানটি অনেক বার পান lots আপনি একটি একক রাখা উচিত এলোমেলো উদাহরণস্বরূপ এবং ব্যবহার করা চালিয়ে পরবর্তী উপর একই উদাহরণস্বরূপ।

//Function to get a random number 
private static readonly Random random = new Random(); 
private static readonly object syncLock = new object(); 
public static int RandomNumber(int min, int max)
{
    lock(syncLock) { // synchronize
        return random.Next(min, max);
    }
}

সম্পাদনা (মন্তব্য দেখুন): আমাদের এখানে কেন দরকার lock?

মূলত, উদাহরণ Nextঅভ্যন্তরীণ অবস্থা পরিবর্তন করতে চলেছে Random। যদি আমরা একই সাথে একাধিক থ্রেড থেকে করি, আপনি তর্ক করতে পারেন "আমরা ফলাফলটি আরও বেশি এলোমেলো করে দিয়েছি", তবে আমরা আসলে যা করছি তা অভ্যন্তরীণ বাস্তবায়নকে সম্ভাব্যভাবে ভেঙে ফেলছে, এবং আমরাও একই সংখ্যাগুলি পেতে শুরু করতে পারি বিভিন্ন থ্রেড থেকে, যা সমস্যা হতে পারে - এবং নাও হতে পারে। অভ্যন্তরীণভাবে যা ঘটে থাকে তার গ্যারান্টি হ'ল বড় সমস্যা, যদিও; যেহেতু থ্রেড-সুরক্ষার কোনও গ্যারান্টি Randomদেয় না । সুতরাং দুটি বৈধ পন্থা আছে:

  • সিঙ্ক্রোনাইজ করুন যাতে আমরা একই সাথে বিভিন্ন থ্রেড থেকে অ্যাক্সেস না করি
  • Randomপ্রতিটি থ্রেডে পৃথক দৃষ্টান্ত ব্যবহার করুন

হয় ভাল হতে পারে; তবে একই সাথে একাধিক কলকারীদের কাছ থেকে একটি একক উদাহরণ নিঃশব্দ করা কেবল সমস্যার জন্য জিজ্ঞাসা করছে।

lockএই অ্যাপ্রোচগুলির প্রথম (এবং সহজ) অর্জন করা; তবে, অন্য পদ্ধতির হতে পারে:

private static readonly ThreadLocal<Random> appRandom
     = new ThreadLocal<Random>(() => new Random());

এটি তখন প্রতি থ্রেড, সুতরাং আপনার সিঙ্ক্রোনাইজ করার দরকার নেই।


19
একটি সাধারণ নিয়ম হিসাবে, সমস্ত স্থিতিশীল পদ্ধতিগুলি থ্রেড-নিরাপদ করা উচিত, কারণ একাধিক থ্রেড একই সাথে এটি কল করবে না তার গ্যারান্টি দেওয়া শক্ত। এটা না করতে সাধারণত প্রয়োজনীয় উদাহরণস্বরূপ (অর্থাত অ স্ট্যাটিক) পদ্ধতি থ্রেড-নিরাপদ।
মার্ক Gravell

5
@ ফ্লোরিন - দুজনের মধ্যে "স্ট্যাক ভিত্তিক" কোনও পার্থক্য নেই। স্ট্যাটিক ক্ষেত্রগুলি কেবল "বাহ্যিক অবস্থা" হিসাবে, এবং একেবারে কলকারীদের মধ্যে ভাগ করা হবে । উদাহরণস্বরূপ, এখানে একটি ভাল সম্ভাবনা রয়েছে যে বিভিন্ন থ্রেডের বিভিন্ন উদাহরণ রয়েছে (একটি সাধারণ প্যাটার্ন)। স্ট্যাটিক্স সহ, এটি গ্যারান্টিযুক্ত যে তারা সকলেই ভাগ করে নেবে ([থ্রেডস্ট্যাটিক] সহ নয়)।
মার্ক Gravell

2
@gdoron আপনি কি ত্রুটি পেয়ে যাচ্ছেন? "লক" এখানে থ্রেডগুলি একে অপরের উপর দিয়ে যাওয়া থেকে বিরত থাকতে হবে ...
মার্ক গ্র্যাভেল

6
@ ড্যান যদি অবজেক্টটি কখনই প্রকাশ্যে না আসে: আপনি পারেন। (খুব তাত্ত্বিক) ঝুঁকিটি হ'ল আপনি প্রত্যাশা করেননি এমনভাবে অন্য কোনও থ্রেড লক করছে।
মার্ক Gravell

3
@ সিমেরন এটি সম্ভবত সম্ভবত আপনি কোনও লকের বাইরেও এলোমেলোভাবে ব্যবহার করছেন। লক করা আপনি যেভাবে লক করছেন তার সমস্ত অ্যাক্সেসকে বাধা দেয় না - এটি কেবল নিশ্চিত করে যে একই উদাহরণে দুটি লক স্টেটমেন্ট একই সাথে চলবে না। সুতরাং lock (syncObject)কেবলমাত্র সমস্ত random.Next() কল যদি এর মধ্যে থাকে তবেই সহায়তা করবে lock (syncObject)। আপনি যে চিত্রটি বর্ণনা করেছেন তা যদি সঠিক lockব্যবহারের সাথে ঘটেও থাকে তবে এটি খুব সম্ভবত একক থ্রেডেড দৃশ্যে ঘটে (যেমন Randomসূক্ষ্মভাবে ভাঙা)।
লুয়ান

118

আপনার অ্যাপ্লিকেশন জুড়ে পুনরায় ব্যবহারের সহজতার জন্য একটি স্ট্যাটিক বর্গ সাহায্য করতে পারে।

public static class StaticRandom
{
    private static int seed;

    private static ThreadLocal<Random> threadLocal = new ThreadLocal<Random>
        (() => new Random(Interlocked.Increment(ref seed)));

    static StaticRandom()
    {
        seed = Environment.TickCount;
    }

    public static Random Instance { get { return threadLocal.Value; } }
}

আপনি তারপর কোড সহ স্থির র্যান্ডম উদাহরণ ব্যবহার করতে পারেন

StaticRandom.Instance.Next(1, 100);

62

মার্কের সমাধানটি বেশ ব্যয়বহুল হতে পারে কারণ এটি প্রতিবার সিঙ্ক্রোনাইজ করা দরকার।

থ্রেড-নির্দিষ্ট স্টোরেজ প্যাটার্নটি ব্যবহার করে আমরা সিঙ্ক্রোনাইজেশনের প্রয়োজনীয়তা অর্জন করতে পারি:


public class RandomNumber : IRandomNumber
{
    private static readonly Random Global = new Random();
    [ThreadStatic] private static Random _local;

    public int Next(int max)
    {
        var localBuffer = _local;
        if (localBuffer == null) 
        {
            int seed;
            lock(Global) seed = Global.Next();
            localBuffer = new Random(seed);
            _local = localBuffer;
        }
        return localBuffer.Next(max);
    }
}

দুটি বাস্তবায়ন পরিমাপ করুন এবং আপনার একটি উল্লেখযোগ্য পার্থক্য দেখা উচিত।


12
লকগুলি খুব কম সস্তা যখন তারা প্রতিদ্বন্দ্বিতা না করে ... এবং প্রতিদ্বন্দ্বিতা করা হলেও আমি আশা করি "এখন সংখ্যাটি দিয়ে কিছু করুন" কোডটি সবচেয়ে আকর্ষণীয় পরিস্থিতিতে লকটির দামটি বামন করবে।
মার্ক গ্র্যাভেল

4
সম্মতি জানানো হয়েছে, এটি লকিংয়ের সমস্যা সমাধান করে, তবে এটি এখনও তুচ্ছ সমস্যার একটি অত্যন্ত জটিল সমাধান নয়: যে কোনও একটির পরিবর্তে একটি এলোমেলো সংখ্যা তৈরি করতে আপনার কোড '' দুই '' লাইন লিখতে হবে। কোডের একটি সহজ লাইনটি পড়া কি এটি সত্যই মূল্যবান?
EMP

4
+1 Randomবীজ পাওয়ার জন্য অতিরিক্ত বিশ্বব্যাপী উদাহরণ ব্যবহার করা একটি দুর্দান্ত ধারণা। আরও নোট করুন যে ThreadLocal<T>.NET 4 তে প্রবর্তিত ক্লাসটি ব্যবহার করে কোডটি আরও সরল করা যেতে পারে (ফিল এছাড়াও নীচে লিখেছেন )।
গ্রো

40

আমার উত্তর এখানে থেকে :

কেবল সঠিক সমাধানটির পুনরাবৃত্তি :

namespace mySpace
{
    public static class Util
    {
        private static rnd = new Random();
        public static int GetRandom()
        {
            return rnd.Next();
        }
    }
}

সুতরাং আপনি কল করতে পারেন:

var i = Util.GetRandom();

সব জুড়ে।

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

public static class Util
{
    public static int GetRandom()
    {
        return Guid.NewGuid().GetHashCode();
    }
}

এটা একটা পুঁচকে বিট ধীর হতে যাচ্ছে, কিন্তু আরো অনেক র্যান্ডম হতে পারে তুলনায় Random.Nextঅন্তত আমার অভিজ্ঞতা থেকে।

তবে না :

new Random(Guid.NewGuid().GetHashCode()).Next();

অপ্রয়োজনীয় অবজেক্ট তৈরি বিশেষত একটি লুপের নিচে এটি ধীর করে তুলছে।

এবং কখনই না :

new Random().Next();

এটি কেবল ধীর নয় (একটি লুপের অভ্যন্তরে), এর এলোমেলোতাটি ... আমার মতে আসলে খুব ভাল নয় ..


10
আমি গাইড মামলার সাথে একমত নই। এলোমেলো শ্রেণি অভিন্ন বিতরণ প্রয়োগ করে। যা গাইডের ক্ষেত্রে হয় না। গাইডের লক্ষ্য হ'ল একচেটিয়াভাবে বিতরণ না করে অনন্য হতে হবে (এবং এর বাস্তবায়ন বেশিরভাগ সময় কিছু হার্ডওয়্যার / মেশিনের সম্পত্তির উপর ভিত্তি করে যা ... এলোমেলোতার বিপরীত)।
এসকোলিন

4
যদি আপনি গাইড প্রজন্মের অভিন্নতা প্রমাণ করতে না পারেন তবে এটিকে এলোমেলো হিসাবে ব্যবহার করা ভুল (এবং হ্যাশটি অভিন্নতা থেকে অন্য পদক্ষেপ দূরে থাকবে)। তেমনি, সংঘর্ষগুলি কোনও বিষয় নয়: সংঘর্ষের অভিন্নতা। গাইডের প্রজন্ম আর হার্ডওয়ারে না থাকার বিষয়ে আমি আরটিএফএম যাচ্ছি, আমার খারাপ (কোনও রেফারেন্স?)
এসকোলিন

5
1. আছে: "এলোপাথাড়ি" দুই সমঝোতা হয় প্যাটার্ন অভাব বা 2. একটি অভিব্যক্তি একটি সম্ভাব্যতা বিতরণের দ্বারা বর্ণিত নিম্নলিখিত প্যাটার্ন অভাব (2 1 অন্তর্ভুক্ত)। আপনার নির্দেশিকার উদাহরণটি 1 ক্ষেত্রে সঠিক, 2 ক্ষেত্রে নয়। বিপরীতে: Randomশ্রেণি ম্যাচ 2 এর সাথে মেলে (এইভাবে, কেস 1ও)। আপনি শুধুমাত্র ব্যবহার প্রতিস্থাপন করতে পারেন Randomআপনার দ্বারা Guid+Hashযদি আপনি না ক্ষেত্রে, আপনার 2. কেস 1 সম্ভবত প্রশ্নের উত্তর দিতে যথেষ্ট, এবং তারপর Guid+Hashকাজ জরিমানা। তবে এটি স্পষ্টভাবে বলা হয়নি (PS: এই ইউনিফর্ম )
আসকোলইন

2
@Askolein শুধু কিছু পরীক্ষা ডেটার জন্য, আমি উভয় বিভিন্ন ব্যাচে চালানো Randomএবং Guid.NewGuid().GetHashCode()মহেশপুর (মাধ্যমে fourmilab.ch/random ) এবং উভয় একভাবে র্যান্ডম হয়। new Random(Guid.NewGuid().GetHashCode())ঠিক তেমনি কাজ করে, যেমন Random"সন্তানের" জন্য বীজ উত্পাদন করতে একটি সিঙ্ক্রোনাইজড "মাস্টার" ব্যবহার করে Random.. অবশ্যই, এটি আপনার সিস্টেম কীভাবে গাইডগুলি উত্পন্ন করে তার উপর নির্ভর করে - আমার সিস্টেমের জন্য, তারা বেশ এলোমেলো এবং অন্যদের উপর এটি হতে পারে এমনকি ক্রিপ্টো-এলোমেলো হতে। তাই উইন্ডোজ বা এমএস এসকিউএল আজকাল ঠিক আছে বলে মনে হচ্ছে। যদিও মনো এবং / অথবা মোবাইল আলাদা হতে পারে।
লুয়ান

2
@ এডবি যেমন আমি আগে মন্তব্যে বলেছি, গাইড (একটি বিশাল সংখ্যক) অনন্য বলে বোঝানো হয়েছে, তখন GetHashCode.NET এর গাইডগুলির গাইড তার স্ট্রিং প্রতিনিধিত্ব থেকে প্রাপ্ত। আউটপুটটি আমার পছন্দ অনুসারে বেশ এলোমেলো।
নওফাল

27

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

byte[] random;
System.Security.Cryptography.RNGCryptoServiceProvider prov = new System.Security.Cryptography.RNGCryptoServiceProvider();
prov.GetBytes(random);

30
আমি নিচু ভোটারদের মধ্যে একজন নই, তবে নোট করুন যে স্ট্যান্ডার্ড পিএনআরজি সত্যিকারের প্রয়োজনকে পরিপূর্ণ করে - অর্থাত্ একটি পরিচিত বীজের কাছ থেকে পুনরায় পুনরুত্পাদন করতে সক্ষম হতে। কখনও কখনও সত্যিকারের ক্রিপ্টোগ্রাফিক আরএনজির নিখরচায় ব্যয় খুব বেশি। এবং কখনও কখনও একটি ক্রিপ্টো আরএনজি প্রয়োজন হয়। কোর্সের জন্য ঘোড়া, তাই কথা বলতে।
মার্ক Gravell

4
ডকুমেন্টেশন অনুসারে এই শ্রেণিটি থ্রেড-নিরাপদ, সুতরাং এটির পক্ষে এটি কিছু।
রব চার্চ

এটি ব্যবহার করে দুটি এলোমেলো স্ট্রিং এক হওয়ার সম্ভাবনা কত? যদি স্ট্রিংটি মাত্র 3 টি অক্ষর হয় তবে আমি অনুমান করি যে এটি উচ্চ সম্ভাবনার সাথে ঘটবে তবে 255 অক্ষরের দৈর্ঘ্যটি কি একই রকম এলোমেলো স্ট্রিং রাখা সম্ভব বা গ্যারান্টিযুক্ত যে এটি অ্যালগরিদম থেকে ঘটতে পারে না?
লুবোমির ভেলচেভ

16

1) মার্ক গ্র্যাভেল যেমন বলেছিলেন, তেমনি একটি এলোমেলো-জেনারেটর ব্যবহার করার চেষ্টা করুন। এটি নির্মাণকারীর সাথে যুক্ত করা সর্বদা দুর্দান্ত System

2) একটি টিপ। ধরা যাক আপনি 100 টি বস্তু তৈরি করতে চান এবং ধরুন তাদের প্রত্যেকের নিজস্ব নিজস্ব র্যান্ডম-জেনারেটর থাকা উচিত (যদি আপনি খুব অল্প সময়ের মধ্যে এলোমেলো সংখ্যার LOADS গণনা করেন তবে সহজ)। আপনি যদি কোনও লুপ (100 টি বস্তুর প্রজন্ম) এ এটি করেন তবে আপনি এটির মতো করতে পারেন (সম্পূর্ণরূপে-এলোমেলোভাবে নিশ্চিত করার জন্য):

int inMyRandSeed;

for(int i=0;i<100;i++)
{
   inMyRandSeed = System.Environment.TickCount + i;
   .
   .
   .
   myNewObject = new MyNewObject(inMyRandSeed);  
   .
   .
   .
}

// Usage: Random m_rndGen = new Random(inMyRandSeed);

চিয়ার্স।


3
আমি সিস্টেম.ভিত্তিক পরিবেশ.টিকাউন্টকে লুপের বাইরে নিয়ে যাব। আপনি পুনরাবৃত্তি করার সময় যদি এটি টিক থাকে তবে আপনার কাছে একই বীজের কাছে দুটি আইটেম শুরু করা হবে। অন্য বিকল্পটি হ'ল টিককাউন্টকে আমি আলাদাভাবে একত্রিত করতে হবে (যেমন সিস্টেম.এনভায়রনমেন্ট.টিককাউন্ট << 8 + i)
ডলফিন

যদি আমি সঠিকভাবে বুঝতে পারি: আপনি কি বোঝাতে চেয়েছেন যে এটি ঘটতে পারে, "সিস্টেম.এনভায়রনমেন্ট.টিককাউন্ট + আই" এর ফলে একই মান হতে পারে?
সাবিল্যান্ড

সম্পাদনা: অবশ্যই লুপের ভিতরে টিককাউন্টের দরকার নেই। আমার খারাপ :)।
সাবিল্যান্ড

2
ডিফল্ট Random()কনস্ট্রাক্টর Random(Environment.TickCount)যাইহোক কল করে
অ্যালস্টি

5

প্রতিবার মৃত্যুদণ্ড কার্যকর করুন

Random random = new Random (15);

আপনি এটি কয়েক মিলিয়ন বার কার্যকর করেন কিনা তাতে কিছু আসে যায় না, আপনি সর্বদা একই বীজ ব্যবহার করবেন।

আপনি যদি ব্যবহার

Random random = new Random ();

আপনি বিভিন্ন এলোমেলো নম্বর ক্রম পান, যদি কোনও হ্যাকার বীজ অনুমান করে এবং আপনার অ্যালগরিদম আপনার সিস্টেমের সুরক্ষার সাথে সম্পর্কিত - আপনার অ্যালগরিদম নষ্ট হয়ে গেছে। আমি তুমি বহু লোককে মৃত্যুদণ্ড দাও এই কনস্ট্রাক্টরে সিস্টেম ঘড়ির দ্বারা বীজ নির্দিষ্ট করা হয় এবং খুব অল্প সময়ের মধ্যে (মিলিসেকেন্ড) বেশ কয়েকটি উদাহরণ তৈরি করা গেলে সম্ভবত তাদের একই বীজ থাকতে পারে।

আপনার যদি নিরাপদ র্যান্ডম সংখ্যার প্রয়োজন হয় তবে আপনাকে অবশ্যই ক্লাসটি ব্যবহার করতে হবে

System.Security.Cryptography.RNGCryptoServiceProvider

public static int Next(int min, int max)
{
    if(min >= max)
    {
        throw new ArgumentException("Min value is greater or equals than Max value.");
    }
    byte[] intBytes = new byte[4];
    using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
    {
        rng.GetNonZeroBytes(intBytes);
    }
    return  min +  Math.Abs(BitConverter.ToInt32(intBytes, 0)) % (max - min + 1);
}

ব্যবহার:

int randomNumber = Next(1,100);

It does not matter if you execute it millions of times, you will always use the same seed. আপনি নিজে বীজ উল্লেখ না করা পর্যন্ত এটি সত্য নয়।
লার্সটেক

পূর্ব নির্ধারিত. ধন্যবাদ ঠিক যেমনটি আপনি লার্সটেক বলছেন ঠিক একই বীজ যদি সর্বদা নির্দিষ্ট করা থাকে তবে এলোমেলো সংখ্যার একই ক্রমটি সর্বদা উত্পন্ন হবে। আমার উত্তরে আমি পরামিতিগুলির সাথে কনস্ট্রাক্টরকে উল্লেখ করি যদি আপনি সর্বদা একই বীজ ব্যবহার করেন। র্যান্ডম ক্লাস কেবল ছদ্ম র্যান্ডম সংখ্যা উত্পন্ন করে। যদি কেউ আপনার অ্যালগোরিদমে কোন বীজ ব্যবহার করেছেন তা খুঁজে বের করে, তবে এটি আপনার অ্যালগরিদমের সুরক্ষা বা এলোমেলোতার সাথে আপস করতে পারে। আরএনজিক্রিপ্টোসেবাপ্রভাইডার শ্রেণীর সাহায্যে আপনার নিরাপদে র্যান্ডম সংখ্যা থাকতে পারে have আমি ইতিমধ্যে সংশোধন করেছি, সংশোধনের জন্য আপনাকে অনেক ধন্যবাদ।
জোমা 21

0

কেবল এ জাতীয় র্যান্ডম শ্রেণীর ভেরিয়েবল ঘোষণা করুন:

    Random r = new Random();
    // ... Get three random numbers.
    //     Here you'll get numbers from 5 to 9
    Console.WriteLine(r.Next(5, 10));

আপনি যদি নিজের তালিকা থেকে প্রতিবার বিভিন্ন এলোমেলো নম্বর পেতে চান তবে ব্যবহার করুন

r.Next(StartPoint,EndPoint) //Here end point will not be included

প্রতিবার Random r = new Random()একবার ঘোষণা করে by


আপনি যখন কল করবেন তখন new Random()এটি সিস্টেমের ঘড়িটি ব্যবহার করে, তবে আপনি যদি ঘড়িটি পরিবর্তনের আগে এই পুরো কোডটিকে পরপর দুবার কল করেন, আপনি একই র্যান্ডম নম্বর পাবেন। এটি উপরের উত্তরগুলির সম্পূর্ণ পয়েন্ট।
সেভেজ

-1

অনেকগুলি সমাধান রয়েছে, এখানে একটি: আপনি যদি কেবল সংখ্যাটি অক্ষর মুছতে চান এবং পদ্ধতিটি একটি এলোমেলো এবং ফলাফলের দৈর্ঘ্য প্রাপ্ত করে।

public String GenerateRandom(Random oRandom, int iLongitudPin)
{
    String sCharacters = "123456789ABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
    int iLength = sCharacters.Length;
    char cCharacter;
    int iLongitudNuevaCadena = iLongitudPin; 
    String sRandomResult = "";
    for (int i = 0; i < iLongitudNuevaCadena; i++)
    {
        cCharacter = sCharacters[oRandom.Next(iLength)];
        sRandomResult += cCharacter.ToString();
    }
    return (sRandomResult);
}

মূল সমস্যাটি এখনও একই - আপনি একটি Randomউদাহরণ দিয়ে যাচ্ছেন , তবে আপনি এখনও কলার একটি ভাগ করে নেওয়া উদাহরণ তৈরি করার প্রত্যাশা করছেন। যদি কলার প্রতিটি সময় নতুন ঘটনা তৈরি করে এবং কোডটি ঘড়ির পরিবর্তনের আগে দুবার কার্যকর করা হয়, আপনি একই র্যান্ডম নম্বর পাবেন। সুতরাং এই উত্তরটি এখনও অনুমান করে যা ভুল হতে পারে।
সেভেজ

এছাড়াও, এলোমেলো সংখ্যা উত্পন্ন করার পদ্ধতি থাকার পুরো বিষয়টি হ'ল এনক্যাপসুলেশন - যে কলিং পদ্ধতিটি বাস্তবায়নের বিষয়ে চিন্তা করতে হবে না, এটি কেবল একটি এলোমেলো সংখ্যা ফিরে পেতে আগ্রহী
সেভেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.