あなたの目標は、それぞれ 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 サイトの他の関連記事を参照してください。