ホームページ > バックエンド開発 > C++ > ランダム文字列ジェネレーターが同じ文字列を生成するのはなぜですか?それを修正するにはどうすればよいですか?

ランダム文字列ジェネレーターが同じ文字列を生成するのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-05 16:45:44
オリジナル
590 人が閲覧しました

Why Does My Random String Generator Produce Identical Strings, and How Can I Fix It?

ランダム文字列ジェネレーターの一貫性の問題

問題ステートメント:

ランダム文字列ジェネレーターが問題を抱えています予期しない動作が発生し、複数の呼び出しで同一の 4 文字の文字列が生成されます。望ましい機能は、2 つの異なるランダム文字列を生成することです。

コード スニペット:

private string RandomString(int size)
{
    StringBuilder builder = new StringBuilder();
    Random random = new Random();
    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();
}
ログイン後にコピー

解決策:

不一致は、RandomString メソッド内で Random クラスの新しいインスタンスを作成することで発生します。これにより、各呼び出しに同じシード値が使用され、同一のシーケンスが生成されます。

解決策:

真のランダム性を確保するには、Random クラスのインスタンス化を次の場所に移動します。静的フィールド:

private static Random random = new Random((int)DateTime.Now.Ticks);
ログイン後にコピー

これにより、プログラム全体にわたって乱数生成器の単一インスタンスが確実に使用されます。 一生。 DateTime.Now.Ticks 値は一意のシードとして機能し、後続の RandomString 呼び出しごとに一意のランダム文字列が生成されることを保証します。

修正コード:

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();
}
ログイン後にコピー

この変更を実装することにより、ジェネレーターは 2 つの異なるランダムを生成するようになります。文字列:

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

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

// creat full rand string
string docNum = Rand1 + "-" + Rand2;
ログイン後にコピー

出力:

UNTE-FWNU
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート