Rumah > pembangunan bahagian belakang > C++ > Kenapa Contoh Random.Next Multiple Mengembalikan nilai yang sama?

Kenapa Contoh Random.Next Multiple Mengembalikan nilai yang sama?

Susan Sarandon
Lepaskan: 2025-01-24 23:31:09
asal
873 orang telah melayarinya

Why Do Multiple Random.Next Instances Return Identical Values?

Memahami penjanaan nombor rawak yang sama dalam C#

Apabila menjana nombor rawak dalam gelung menggunakan pelbagai contoh kelas, anda mungkin memerhatikan bahawa

menghasilkan nilai yang sama berulang kali. Tingkah laku ini berpunca dari cara fungsi kelas Random.Next(). Random

Kelas

bergantung pada nilai benih untuk memulakan urutan nombor pseudo-rawaknya. Jika pelbagai Random contoh dibuat secara berturut -turut, mereka sering menerima nilai benih yang sangat serupa, menghasilkan urutan output yang sama. Random

Penyelesaian: Contoh Rawak Berkongsi

untuk mengatasinya, bukannya membuat contoh

baru untuk setiap objek kelas, buat satu Random contoh dan kongsi di antara semua contoh kelas anda. Ini memastikan bahawa setiap contoh menarik dari urutan yang sama, urutan nombor rawak. Random

Berikut adalah contoh yang lebih baik yang menunjukkan pendekatan ini:

<code class="language-csharp">public class A
{
    private readonly Random _rnd;

    public A(Random rnd)
    {
        _rnd = rnd;
    }

    public void Count()
    {
        int r1 = _rnd.Next(-1, 1); // Note: Next(-1, 1) will only return -1 or 0.  To get -1, 0, or 1, use Next(-1, 2)
        int r2 = _rnd.Next(-1, 2); // Corrected to include 1
    }
}

public class B
{
    private readonly List<A> _listOfA = new List<A>();
    private readonly Random _rnd = new Random();

    public B()
    {
        // Populate _listOfA...  (Example below)
        for (int i = 0; i < 10; i++)
        {
            _listOfA.Add(new A(_rnd));
        }
    }

    public void Process()
    {
        foreach (var aClass in _listOfA)
        {
            aClass.Count();
        }
    }
}</code>
Salin selepas log masuk
dengan menyuntik contoh

yang dikongsi ke dalam pembina kelas _rnd, masing -masing A contoh menggunakan penjana nombor rawak yang sama, menjamin nombor rawak yang berbeza di semua keadaan. Perhatikan pembetulan dalam A untuk memasukkan 1 dalam output yang mungkin. Next(-1,2)

Atas ialah kandungan terperinci Kenapa Contoh Random.Next Multiple Mengembalikan nilai yang sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan