C# - 乱数を生成する

乱数を生成するには System.Random クラスを使用します。

乱数の生成方法(数値)

範囲指定あり
using System;

var rand = new Random();

乱数値(最小値 ~ 最大値 - 1) = rand.Next(最小値, 最大値);
乱数値(最小値 ~ 最大値 - 1) = rand.Next(最小値, 最大値);
乱数値(最小値 ~ 最大値 - 1) = rand.Next(最小値, 最大値);
範囲指定を省略
using System;

var rand = new Random();

乱数値(0 ~ 2,147,483,647) = rand.Next();
乱数値(0 ~ 2,147,483,647) = rand.Next();
乱数値(0 ~ 2,147,483,647) = rand.Next();
サンプルコード
using System;

// Random クラスのインスタンス生成
var rand = new Random();

// 10回ループ
for (int i = 0; i < 10; i++)
{
    // -10 ~ 9 の乱数を生成
    int value = rand.Next(minValue: -10, maxValue: 10);
    System.Console.WriteLine($"{value}");
}
実行結果 実行結果

乱数の生成方法(浮動小数点数)

using System;

var rand = new Random();

乱数値(0 ~ 0.99999999999999978) = rand.NextDouble();
乱数値(0 ~ 0.99999999999999978) = rand.NextDouble();
乱数値(0 ~ 0.99999999999999978) = rand.NextDouble();
サンプルコード
using System;

// Random クラスのインスタンス生成
var rand = new Random();

// 10回ループ
for (int i = 0; i < 10; i++)
{
    // 0 ~ 0.99999999999999978 の乱数を生成
    double value = rand.NextDouble();
    System.Console.WriteLine($"{value}");
}
実行結果 実行結果

常に同じ乱数を生成する(シード値の指定)

Random クラスの new 時に任意の数(シード値)を渡すと、同じ乱数が返されます。
using System;

var rand = new Random(任意の数);
サンプルコード
using System;

// 同じシード値でクラスを初期化
var rand1 = new Random(Seed: 10);
var rand2 = new Random(Seed: 10);

// どちらも 2041175501 を返す
int value1 = rand1.Next();
int value2 = rand2.Next();
System.Console.WriteLine($"1回目");
System.Console.WriteLine($"value1 = {value1}");
System.Console.WriteLine($"value2 = {value2}");

// どちらも 1613858733 を返す
value1 = rand1.Next();
value2 = rand2.Next();
System.Console.WriteLine($"2回目");
System.Console.WriteLine($"value1 = {value1}");
System.Console.WriteLine($"value2 = {value2}");
実行結果 実行結果

検証環境

関連ページ