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
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
<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>
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!