次よりも3桁の乱数を生成するより良い方法はありますか:
var now = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
string my3digitrandomnumber = now.Substring(now.Length - 7, 3);
ありがとう..
はい - 現在のコードはまったくランダムではありません。システム時間に基づいています。特に、これを同時に複数のスレッドから使用する場合、または同じスレッド内で立て続けに数回使用する場合でも、毎回同じ数が得られます。
Random
またはRandomNumberGenerator
(より安全です) を使用する必要があります。
たとえば、 のインスタンスを取得したら、次のようにRandom
使用できます。
int value = rng.Next(1000);
string text = value.ToString("000");
(これは、数字をテキストとして使用することを前提としています。3 桁であることが保証されている整数rng.Next(100, 1000)
が必要な場合は、 を使用します。)
ただし、次の点に注意が必要Random
です。
したがって、理想的には、おそらくスレッドごとに 1 つ必要です。ランダム性に関する私の記事では、これについて詳しく説明し、いくつかのサンプル コードを提供しています。
int r = (new Random()).Next(100, 1000);
Random
クラスとコールをNext(10)
3 回使用できます。
ええと、まずそれはあなたがそこに持っている奇妙な設定です。なぜ最初に日付を取得するのですか?
これを使用して、3 桁 (1000 未満) の数字を取得する必要があります。
Random rand = new Random(); // <-- Make this static somewhere
const int maxValue = 999;
string number = rand.Next(maxValue + 1).ToString("D3");
これmaxValue + 1
は、パラメータ forRandom.Next(int)
が排他的な上限であるためです。つまり、返される数値は常にパラメータよりも小さくなります。それは決して等しくあり得ません。
new Random.NextDouble() * 1000