C# Language
C#で乱数を生成する
サーチ…
構文
ランダム()
ランダム(intシード)
int Next()
int次へ(int maxValue)
int次へ(int minValue、int maxValue)
パラメーター
パラメーター | 詳細 |
---|---|
シード | 乱数を生成するための値。設定されていない場合、デフォルト値は現在のシステム時刻によって決定されます。 |
minValue | 生成される数値はこの値より小さくなりません。設定されていない場合、デフォルト値は0です。 |
maxValue | 生成される数値はこの値より小さくなります。設定されていない場合、デフォルト値はInt32.MaxValue です。 |
戻り値 | ランダムな値を持つ数値を返します。 |
備考
システムによって生成されたランダムシードは、異なる実行ごとに同じではありません。
同じ時間に生成された種は同じかもしれません。
ランダムなintを生成する
この例では、0〜2147483647の間の乱数値を生成します。
Random rnd = new Random();
int randomNumber = rnd.Next();
ランダムなdoubleを生成する
0と1.0の間の乱数を生成します。 (1.0を含まない)
Random rnd = new Random();
var randomDouble = rnd.NextDouble();
指定された範囲にランダムなintを生成する
minValue
とmaxValue - 1
間の乱数を生成します。
Random rnd = new Random();
var randomBetween10And20 = rnd.Next(10, 20);
乱数の同じシーケンスを繰り返し生成する
同じシードのRandom
インスタンスを作成する場合、同じ番号が生成されます。
int seed = 5;
for (int i = 0; i < 2; i++)
{
Console.WriteLine("Random instance " + i);
Random rnd = new Random(seed);
for (int j = 0; j < 5; j++)
{
Console.Write(rnd.Next());
Console.Write(" ");
}
Console.WriteLine();
}
出力:
Random instance 0
726643700 610783965 564707973 1342984399 995276750
Random instance 1
726643700 610783965 564707973 1342984399 995276750
異なる種を持つ複数のランダムなクラスを同時に作成する
同時に作成された2つのランダムなクラスは、同じシード値を持ちます。
System.Guid.NewGuid().GetHashCode()
を使用するSystem.Guid.NewGuid().GetHashCode()
は同じ時間でも異なる種を得ることができます。
Random rnd1 = new Random();
Random rnd2 = new Random();
Console.WriteLine("First 5 random number in rnd1");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd2.Next());
rnd1 = new Random(Guid.NewGuid().GetHashCode());
rnd2 = new Random(Guid.NewGuid().GetHashCode());
Console.WriteLine("First 5 random number in rnd1 using Guid");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2 using Guid");
for (int i = 0; i < 5; i++)
Console.WriteLine(rnd2.Next());
異なるシードを達成する別の方法は、別のRandom
インスタンスを使用してシード値を取得することです。
Random rndSeeds = new Random();
Random rnd1 = new Random(rndSeeds.Next());
Random rnd2 = new Random(rndSeeds.Next());
これにより、 rndSeeds
シード値だけを設定することによって、すべてのRandom
インスタンスの結果を制御することも可能になります。他のすべてのインスタンスは、その単一のシード値から確定的に導出されます。
ランダムな文字を生成する
指定された範囲の数値に対してNext()
オーバーロードを使用してa
とz
間にランダムな文字を生成し、結果のint
をchar
変換します
Random rnd = new Random();
char randomChar = (char)rnd.Next('a','z');
//'a' and 'z' are interpreted as ints for parameters for Next()
最大値のパーセンテージである数値を生成する
乱数の一般的な必要性は、いくつかの最大値のX%
である数を生成することです。これは、 NextDouble()
結果をパーセンテージとして扱うことでNextDouble()
できます。
var rnd = new Random();
var maxValue = 5000;
var percentage = rnd.NextDouble();
var result = maxValue * percentage;
//suppose NextDouble() returns .65, result will hold 65% of 5000: 3250.
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow