Isu Konsistensi Penjana Rentetan Rawak
Masalah:
Penjana rentetan rawak gagal menghasilkan rentetan yang berbeza walaupun dipanggil beberapa kali. Sebaliknya, ia menjana rentetan rawak yang sama berulang kali.
Kod:
private string RandomString(int size) { StringBuilder builder = new StringBuilder(); Random random = new Random(); // Random object created each time 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(); }
Sebab:
Isunya terletak dalam penciptaan objek Rawak baharu dalam kaedah RandomString. Ini memulakan penjana nombor rawak dengan benih yang sama setiap kali, membawa kepada urutan nombor rawak yang sama dan, akhirnya, rentetan rawak yang sama.
Penyelesaian:
Untuk memastikan dua rentetan rawak yang berbeza, objek Rawak harus dibuat di luar kaedah RandomString dan dibuat statik. Ini memastikan bahawa benih yang sama digunakan sepanjang hayat aplikasi, menghasilkan urutan nombor rawak yang konsisten dan rentetan yang berbeza pada setiap panggilan.
Kod Diubah Suai:
private static Random random = new Random((int)DateTime.Now.Ticks); // Random object created outside method 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(); }
Atas ialah kandungan terperinci Mengapa Penjana Rentetan Rawak Saya Terus Menghasilkan Rentetan Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!