Rumah >pembangunan bahagian belakang >C++ >Mengapa Penjana Rentetan Rawak Saya Menghasilkan Output Pendua?

Mengapa Penjana Rentetan Rawak Saya Menghasilkan Output Pendua?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-05 11:17:41281semak imbas

Why Does My Random String Generator Produce Duplicate Outputs?

Output Pendua Penjana Rentetan Rawak

Matlamat anda adalah untuk menjana dua rentetan rawak empat aksara yang berbeza. Walau bagaimanapun, kod semasa anda mengembalikan pendua.

Punca Punca

Punca Punca terletak pada pemulaan tika Rawak dalam kaedah RandomString. Setiap penyebutan kaedah mencipta tika baharu Rawak, menghasilkan jujukan nombor rawak yang sama.

Penyelesaian

Untuk memastikan dua rentetan rawak yang unik, gerakkan permulaan bagi contoh Rawak di luar kaedah, ke peringkat kelas. Ini memastikan bahawa satu tika digunakan sepanjang hayat kelas.

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();
}

// get 1st random string 
string Rand1 = RandomString(4);

// get 2nd random string 
string Rand2 = RandomString(4);

// create full rand string
string docNum = Rand1 + "-" + Rand2;

Contoh Output

Kod yang diubah suai akan menghasilkan dua rentetan rawak empat aksara yang unik, seperti sebagai:

UNTE-FWNU

bukannya pendua seperti:

UNTE-UNTE

Dengan memulakan kejadian Rawak pada peringkat kelas, anda memastikan bahawa urutan nombor rawak yang konsisten digunakan, menghasilkan unik rentetan rawak.

Atas ialah kandungan terperinci Mengapa Penjana Rentetan Rawak Saya Menghasilkan Output Pendua?. 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