Rumah pembangunan bahagian belakang C++ Mengapakah Penjana Nombor Rawak C# Saya Menghasilkan Urutan Yang Sama Merentas Berbilang Objek?

Mengapakah Penjana Nombor Rawak C# Saya Menghasilkan Urutan Yang Sama Merentas Berbilang Objek?

Jan 24, 2025 pm 11:26 PM

Why Does My C# Random Number Generator Produce the Same Sequence Across Multiple Objects?

Memahami Penjanaan Nombor Rawak dalam C# dan Mengelakkan Ulangan Urutan

Artikel ini menangani isu biasa dalam C#: berbilang kejadian kelas Random menjana jujukan nombor rawak yang sama. Kelas Random, sementara direka untuk menjana nombor yang kelihatan tidak dapat diramalkan, bergantung pada nilai benih untuk algoritma dalamannya. Jika berbilang Random objek dicipta secara berturut-turut, ia selalunya menerima nilai benih yang serupa (selalunya berdasarkan jam sistem), menghasilkan jujukan output yang sama.

Masalahnya: Berbilang Random Kejadian

Mencipta contoh Random baharu untuk setiap objek yang memerlukan nombor rawak ialah puncanya. Oleh kerana nilai benih adalah rapat, jujukan yang dijana adalah hampir sama.

Penyelesaian: Satu, Dikongsi Random Contoh

Penyelesaian adalah mudah: buat satu Random contoh dan kongsikannya antara semua objek yang memerlukan nombor rawak. Ini memastikan bahawa setiap objek menarik daripada urutan yang sama dan berkembang, menghalang masalah pengulangan.

Berikut ialah cara untuk melaksanakan ini menggunakan ahli statik:

class A
{
    private static readonly Random rnd = new Random(); // Static, read-only instance

    public void Count()
    {
        int r1 = rnd.Next(-1, 1);
        int r2 = rnd.Next(-1, 1);
    }
}

class B
{
    List<A> listOfA = new List<A>();

    public void DoSomething()
    {
        foreach (A aClass in listOfA)
        {
            aClass.Count();
        }
    }
}
Salin selepas log masuk

Dengan menggunakan medan static readonly, kami memastikan satu tika Random dibuat sekali dan dikongsi merentas semua tika kelas A. Ini menghapuskan risiko nilai benih pendua dan menjamin urutan nombor rawak yang unik untuk setiap panggilan ke rnd.Next(). Pendekatan ini menghasilkan urutan yang benar-benar rawak dan berbeza untuk setiap objek A.

Atas ialah kandungan terperinci Mengapakah Penjana Nombor Rawak C# Saya Menghasilkan Urutan Yang Sama Merentas Berbilang Objek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Langkah Format Fungsi Fungsi C Langkah Penukaran Kes Langkah Format Fungsi Fungsi C Langkah Penukaran Kes Mar 03, 2025 pm 05:53 PM

Langkah Format Fungsi Fungsi C Langkah Penukaran Kes

Apakah jenis nilai yang dikembalikan oleh fungsi bahasa C? Apa yang menentukan nilai pulangan? Apakah jenis nilai yang dikembalikan oleh fungsi bahasa C? Apa yang menentukan nilai pulangan? Mar 03, 2025 pm 05:52 PM

Apakah jenis nilai yang dikembalikan oleh fungsi bahasa C? Apa yang menentukan nilai pulangan?

Gulc: Perpustakaan C dibina dari awal Gulc: Perpustakaan C dibina dari awal Mar 03, 2025 pm 05:46 PM

Gulc: Perpustakaan C dibina dari awal

Apakah definisi dan peraturan panggilan fungsi bahasa C dan apakah itu Apakah definisi dan peraturan panggilan fungsi bahasa C dan apakah itu Mar 03, 2025 pm 05:53 PM

Apakah definisi dan peraturan panggilan fungsi bahasa C dan apakah itu

Bagaimana Perpustakaan Templat St Standard (STL) berfungsi? Bagaimana Perpustakaan Templat St Standard (STL) berfungsi? Mar 12, 2025 pm 04:50 PM

Bagaimana Perpustakaan Templat St Standard (STL) berfungsi?

Penggunaan dan perkongsian frasa yang berbeza Penggunaan dan perkongsian frasa yang berbeza Mar 03, 2025 pm 05:51 PM

Penggunaan dan perkongsian frasa yang berbeza

Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan? Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan? Mar 03, 2025 pm 05:51 PM

Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan?

Bagaimanakah saya menggunakan algoritma dari STL (jenis, mencari, mengubah, dll) dengan cekap? Bagaimanakah saya menggunakan algoritma dari STL (jenis, mencari, mengubah, dll) dengan cekap? Mar 12, 2025 pm 04:52 PM

Bagaimanakah saya menggunakan algoritma dari STL (jenis, mencari, mengubah, dll) dengan cekap?

See all articles