Rumah >pembangunan bahagian belakang >C++ >Mengapa Penjana Rentetan Rawak Saya Mengembalikan Rentetan Yang Sama?

Mengapa Penjana Rentetan Rawak Saya Mengembalikan Rentetan Yang Sama?

DDD
DDDasal
2025-01-05 00:57:39357semak imbas

Why Does My Random String Generator Return Identical Strings?

Penjana Rentetan Rawak 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.

Penyelesaian:

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn