範囲設定に注意
(2016/12/03 0:42:30 created.)
前節のサンプルのように、整数の乱数を取得するときは Next() メソッドを使用します。このとき、次のように発生させる乱数に範囲を指定することもできます。ただし、その設定方法に注意が必要です。
Program.cs
namespace Tips_Random
{
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var rand = new Random();
#region 範囲設定に注意
Console.WriteLine("Random.Next(min, max) で得られる数値は min ≦ x < max となる。");
Console.WriteLine("最小値 min は含まれるが、最大値 max は含まれないことに注意しないといけない。");
Console.WriteLine("例えば [0, 10000) を指定する場合は Random.Next(0, 10000) と指定する。");
var values = Enumerable.Range(0, 1000000).Select(_ => rand.Next(0, 10000)).ToArray();
Console.WriteLine(string.Join(Environment.NewLine, new string[]
{
"[ 0] = " + values.Count(x => x == 0),
"[ 1] = " + values.Count(x => x == 1),
"[ 2] = " + values.Count(x => x == 2),
"[ 9997] = " + values.Count(x => x == 9997),
"[ 9998] = " + values.Count(x => x == 9998),
"[ 9999] = " + values.Count(x => x == 9999),
"[10000] = " + values.Count(x => x == 10000),
}));
Console.WriteLine();
Console.ReadKey();
#endregion 範囲設定に注意
}
}
}
このコード例では 0 から 10000 までの範囲を指定していますが、数式で書くと 0 ≦ x < 10000 というように、最大値は含まれないことになります。もし 10000 も乱数として発生させたい場合は Next(0, 10001) というように書かなければいけません。
コードの後半では発生させた値の中から0、1、2、9997、9998、9999、10000 となった個数をカウントして表示させています。10000 という値がひとつも発生していないことがわかります。
Tweet