Rumah >pembangunan bahagian belakang >C++ >Mengapa Penjana Rentetan Rawak Saya Mengembalikan Rentetan Yang Sama?
Matlamat anda ialah untuk menjana dua rentetan rawak yang berbeza, setiap satu dengan empat aksara. Walau bagaimanapun, kod semasa anda menghasilkan dua rentetan yang sama.
Isu ini berpunca daripada penciptaan tika Rawak baharu dalam kaedah RandomString. Memandangkan tika ini dimulakan untuk setiap panggilan, ia menghasilkan jujukan nombor rawak yang sama, menghasilkan rentetan pendua.
Untuk memastikan dua rentetan unik, kita perlu memastikan tika Rawak dicipta sekali sahaja. Kita boleh melakukan ini dengan menjadikan contoh itu statik dan memulakannya menggunakan nilai berbiji, seperti masa semasa dalam tanda:
private static Random random = new Random((int)DateTime.Now.Ticks);
Dengan menjadikan contoh itu statik dan menggunakan benih, kami memastikan nombor rawak jujukan adalah berbeza untuk setiap panggilan kepada kaedah RandomString, seperti yang ditunjukkan dalam kod yang diubah suai di bawah:
private static Random random = new Random((int)DateTime.Now.Ticks);//thanks to McAden private string RandomString(int size) { StringBuilder builder = new StringBuilder(); char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } return builder.ToString(); } // get 1st random string string Rand1 = RandomString(4); // get 2nd random string string Rand2 = RandomString(4); // creat full rand string string docNum = Rand1 + "-" + Rand2;
Dengan pengubahsuaian ini, kod anda kini akan menjana dua rentetan rawak yang berbeza setiap kali ia dilaksanakan.
Atas ialah kandungan terperinci Mengapa Penjana Rentetan Rawak Saya Mengembalikan Rentetan Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!