乱数を生成する - C#

C#で乱数を生成するコードを紹介します。

概要

C#で乱数を生成する場合はRandomクラスを利用します。

0から1の間の乱数を生成する

0から1までの間の乱数を作成します。作成される乱数は小数を含む実数です。

書式

0から1までの乱数を生成する場合は、Randomオブジェクトの NextDouble() メソッドを呼び出します。
[Randomオブジェクト].NextDouble()

プログラム例

Windows Formアプリケーションを作成します。

UI

下図のフォームを作成します。MultilineプロパティをTrueに設定した複数行のテキストボックスとボタンを配置します。

コード

次のコードを記述します。button1のクリックイベントを実装しています。 ボタンのクリックイベントハンドラの作成手順はこちらの記事を参照してください。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RandomNumberGenerate
{
  public partial class FormRandomZeroToOne : Form
  {
    private Random rnd;
    //private System.Random rnd;

    public FormRandomZeroToOne()
    {
      InitializeComponent();
    }

    private void FormRandomZeroToOne_Load(object sender, EventArgs e)
    {
      rnd = new Random();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      double random_num = rnd.NextDouble();
      textBox1.Text += string.Format("生成された乱数: {0:f}\r\n", random_num);
    }
  }
}

解説

乱数を生成するためには、乱数を生成するRandom クラスのオブジェクトを作成する必要があります。 初めに new Random() を呼び出し、Randomクラスのオブジェクトを作成します。
Randomクラスのコンストラクタに何も指定しない場合は、システムクロックからシード値を生成するため、毎回実行時には違う乱数になります。 一方、コンストラクタにシード値を与えた場合は、実行開始時から毎回同じ乱数が生成される動作になります。
  rnd = new Random();

乱数の生成は、Randomクラスのオブジェクトの NextDouble() メソッドで生成します。このメソッドの戻り値で 0から1の間のdouble型の乱数の数値が返ります。
  double random_num = rnd.NextDouble();

生成された乱数をテキストボックスに表示します。
  textBox1.Text += string.Format("生成された乱数: {0:f}\r\n", random_num);

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。株のテキストボックスにメッセージと生成された乱数が表示されます。


[button1]ボタンをクリックすると毎回違った数値が生成されます。



アプリケーションを再起動して、再度[button1]をクリックします。 Randomオブジェクトのシード値がシステムクロックで指定しているため、毎回違った乱数が表示されます。

指定した範囲の数値での整数の乱数を生成する

指定した範囲での数値の整数の乱数を生成するコードを紹介します。

書式

指定した範囲の整数の乱数を生成する場合は、Randomオブジェクトの Next() メソッドを呼び出します。 第一引数に生成される乱数の最小値、第二引数に生成される乱数の最大値を与えます。
[Randomオブジェクト].Next([生成される乱数の最小値],[生成される乱数の最大値])
なお、Nextメソッドの引数が1つの場合は、0以上かつ与えた引数より小さい乱数を生成します。0<=[生成される乱数]<[引数の値]
[Randomオブジェクト].Next([生成される乱数の最大値])

プログラム例

50から100までの範囲の乱数を生成するプログラムを作成します。

UI

下図のフォームを作成します。MultilineプロパティをTrueに設定した複数行のテキストボックスとボタンを配置します。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RandomNumberGenerate
{
  public partial class FormRandomRangeInteger : Form
  {
    private Random rnd;

    public FormRandomRangeInteger()
    {
      InitializeComponent();
    }

    private void FormRandomRangeInteger _Load(object sender, EventArgs e)
    {
      rnd = new Random();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int rand_number = rnd.Next(50,100);

      textBox1.Text += string.Format("生成された乱数: {0:d}\r\n", rand_number);
    }
  
  }
}

解説

コードは先のプログラムと同様です。乱数の生成部分が次のコードとなり、50から100の間の整数の乱数を生成する処理に変わっています。
  int rand_number = rnd.Next(50,100);

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。乱数が生成され、テキストボックスに数値が表示されます。


再度ボタンを押すと、別の乱数が生成されます。


ボタンを繰り返し押して乱数の値を確認します。50から100までの乱数が生成できていることがわかります。


指定した範囲での整数の乱数を生成できました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2021-12-31
改訂日: 2023-03-15
iPentec all rights reserverd.