Isu biasa yang dihadapi dengan penjana rentetan rawak timbul apabila rentetan yang dijana kelihatan sama, walaupun semasa memanggil penjana berbilang kali. Masalah ini berpunca daripada fakta bahawa penjana dimulakan dalam fungsi, menyebabkan set nilai rawak yang sama dijana berulang kali.
Untuk memastikan rentetan rawak yang berbeza, tika Rawak harus dicipta di luar fungsi, di mana ia kekal boleh diakses sepanjang kitaran hayat program. Dengan berbuat demikian, tika itu mengekalkan keadaannya, menghalang penjanaan rentetan yang sama.
Berikut ialah versi kod anda yang dikemas kini:
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); // create full rand string string docNum = Rand1 + "-" + Rand2;
Sekarang, apabila anda memanggil fungsi RandomString dua kali, ia akan menghasilkan dua rentetan empat aksara yang berbeza, menghasilkan output yang serupa dengan "UNTE-FWNU" dan bukannya "UNTE-UNTE."
Atas ialah kandungan terperinci Mengapa Penjana Rentetan Rawak Saya Terus Mengembalikan Rentetan Yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!