ホームページ >バックエンド開発 >C++ >ランダム文字列ジェネレーターが同じ文字列を返すのはなぜですか?

ランダム文字列ジェネレーターが同じ文字列を返すのはなぜですか?

DDD
DDDオリジナル
2025-01-05 00:57:39325ブラウズ

Why Does My Random String Generator Return Identical Strings?

同じ文字列を返すランダム文字列ジェネレータ

あなたの目標は、それぞれ 4 文字を含む 2 つの異なるランダム文字列を生成することです。ただし、現在のコードでは 2 つの同一の文字列が生成されます。

この問題は、RandomString メソッド内での新しい Random インスタンスの作成に起因します。このインスタンスは呼び出しごとに初期化されるため、同じ乱数シーケンスが生成され、重複した文字列が生成されます。

解決策:

2 つの一意の文字列を確保するには、Random インスタンスを確保する必要があります。は一度だけ作成されます。これを行うには、インスタンスを静的にし、ティック単位の現在時刻などのシード値を使用して初期化します。

private static Random random = new Random((int)DateTime.Now.Ticks);

インスタンスを静的にし、シードを使用することで、乱数が以下の変更されたコードに示されているように、シーケンスは RandomString メソッドの呼び出しごとに異なります。

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;

この変更により、コードは 2 つの異なるランダムを生成するようになります。実行されるたびに文字列が返されます。

以上がランダム文字列ジェネレーターが同じ文字列を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。