C# での乱数の生成

# ランダムな int を生成

この例では、0 から 2147483647 までのランダムな値を生成します。

Random rnd = new Random();
int randomNumber = rnd.Next();

# 指定された範囲でランダムな 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 つの Random クラスは、同じシード値を持ちます。

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());

これにより、すべての Random の結果を制御することも可能になります rndSeeds のシード値のみを設定することによるインスタンス .他のすべてのインスタンスは、その単一のシード値から決定論的に導出されます。

# ランダム double を生成

0 から 1.0 の間の乱数を生成します。 (1.0 を含まない)

Random rnd = new Random();
var randomDouble = rnd.NextDouble();

# ランダムな文字を生成

a の間のランダムな文字を生成します と z Next() を使用して 指定された範囲の数値をオーバーロードし、結果の 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() の結果を処理することで実行できます。 パーセンテージ:

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.

# 構文

  • ランダム()
  • ランダム (int シード)
  • int Next()
  • int Next(int maxValue)
  • int Next(int minValue, int maxValue)
  • # パラメータ

    パラメータ 詳細
    乱数を生成するための値。設定されていない場合、デフォルト値は現在のシステム時間によって決定されます。
    最小値 生成される数値は、この値よりも小さくなりません。設定されていない場合、デフォルト値は 0 です。
    最大値 生成される数値は、この値よりも小さくなります。設定されていない場合、デフォルト値は Int32.MaxValue です .
    戻り値 ランダムな値で数値を返します。

    # コメント

    システムによって生成されたランダム シードは、実行ごとに同じではありません。

    同じ時期に生成された種は同じかもしれません。