Isu Konsistensi Penjana Rentetan Rawak
Pernyataan Masalah:
Penjana rentetan rawak sedang mempamerkan tingkah laku yang tidak dijangka, menghasilkan rentetan empat aksara yang sama apabila berbilang seruan. Fungsi yang diingini adalah untuk menjana dua rentetan rawak yang berbeza.
Coretan Kod:
private string RandomString(int size) { StringBuilder builder = new StringBuilder(); Random random = new Random(); 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(); }
Resolusi:
The ketidakkonsistenan timbul daripada mencipta contoh baharu kelas Rawak dalam kaedah RandomString. Ini menyebabkan nilai benih yang sama digunakan untuk setiap seruan, menghasilkan urutan yang sama.
Penyelesaian:
Untuk memastikan rawak sebenar, alihkan instantiasi kelas Rawak ke medan statik:
private static Random random = new Random((int)DateTime.Now.Ticks);
Ini memastikan bahawa satu contoh penjana nombor rawak digunakan sepanjang sepanjang hayat program. Nilai DateTime.Now.Ticks berfungsi sebagai benih unik, menjamin bahawa setiap panggilan berikutnya ke RandomString menghasilkan rentetan rawak yang unik.
Kod Diubah Suai:
private static Random random = new Random((int)DateTime.Now.Ticks); 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(); }
Dengan melaksanakan perubahan ini, penjana kini akan menghasilkan dua rawak yang berbeza rentetan:
// get 1st random string string Rand1 = RandomString(4); // get 2nd random string string Rand2 = RandomString(4); // creat full rand string string docNum = Rand1 + "-" + Rand2;
Output:
UNTE-FWNU
Atas ialah kandungan terperinci Mengapa Penjana Rentetan Rawak Saya Menghasilkan Rentetan Yang Sama, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!