「.NET」戦いの神が教える!「Randomクラス」で戦略的な基礎を解説

2024年11月11日月曜日

基本

t f B! P L

名前空間: System

自己紹介

ふふ、私は「Random」だ。偶然の力を掌握し、数字の流れを思いのままに操る存在。予測不能?その通り、私の機嫌次第で何が出るかは神のみぞ知る。だが、それが私の魅力でもあるだろう。偶然と必然を気まぐれに、そして計算された混沌を提供してやろう。


基本機能

私が持つ基本の力、それはランダムな数値の生成だ。Next()メソッドを呼べば、0から指定範囲までの整数を気まぐれに放ってやろう。また、NextDouble()で0から1の間の小数を、NextBytes()でバイト配列を生成する。何でも作り出せる、それが私の力だ。

乱数の上限と範囲指定

Next()には範囲を指定することもできるぞ。指定された範囲の整数を返すことで、必要な範囲の乱数を生成できる。だが、その範囲も私の一存で動いていることを忘れるな。上限と下限を指定し、適切な範囲を設定しておくといい。

小数点以下の乱数生成

浮動小数点が必要な場合はNextDouble()を使え。0から1の間で私が適当に選んでやる。細かい数値であっても、私の気まぐれに任せればどんな値が出るかわからない。精度を求めるならしっかりと扱え。

シード値の設定

私の生成する乱数の出力を予測可能にしたい?ならばSeed値を設定するといい。決まった初期化で同じ結果を導き出せるが、私が常に同じ結果を返すなど、そんな安定した存在ではないと知っておくがいい。

ランダムと非同期の注意点

並列処理や非同期処理で私を使うときは注意せよ。複数のスレッドで使う場合、同じシードから生成される結果は同じになってしまう。マルチスレッドには注意し、必要であれば各スレッドで独自のRandomインスタンスを用意することだ。

サンプルコード

C#
using System;

namespace RandomExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // シード値を指定してRandomオブジェクトを作成
            int seed = 123;
            Random random = new Random(seed);

            // 0から99までのランダムな整数を出力
            for (int i = 0; i < 10; i++)
            {
                int randomNumber = random.Next(100);
                Console.WriteLine(randomNumber);
            }

            Console.WriteLine();

            // シード値を指定せずにRandomオブジェクトを作成
            Random random2 = new Random();

            // 1から5までのランダムな整数を出力
            for (int i = 0; i < 10; i++)
            {
                int randomNumber = random2.Next(1, 6);
                Console.WriteLine(randomNumber);
            }
        }
    }
}
  

サンプルコードの解説

  • シード値を指定してRandomオブジェクトを作成: seed 変数に任意の値を設定し、その値をシード値としてRandomオブジェクトを作成します。
  • 0から99までのランダムな整数を出力: Next(100) メソッドを使って、0から99までのランダムな整数を10回生成し、コンソールに出力します。
  • シード値を指定せずにRandomオブジェクトを作成: シード値を指定せずにRandomオブジェクトを作成します。
  • 1から5までのランダムな整数を出力: Next(1, 6) メソッドを使って、1から5までのランダムな整数を10回生成し、コンソールに出力します。

このブログを検索

QooQ