ランダム文字列ジェネレーターの一貫性の問題
問題ステートメント:
ランダム文字列ジェネレーターが問題を抱えています予期しない動作が発生し、複数の呼び出しで同一の 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 サイトの他の関連記事を参照してください。