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

Mengapa Penjana Rentetan Rawak Saya Terus Menghasilkan Rentetan Yang Sama?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 22:41:38604semak imbas

Why Does My Random String Generator Keep Producing the Same String?

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!

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