web-dev-qa-db-ja.com

C#の乱数ジェネレーターはどのように機能しますか?

私は、C#の乱数ジェネレーターがどのように機能するのか疑問に思っていました。また、ランダムに生成するプログラムを作成する方法に興味がありましたWHOLE INTEGER 1-100の数字.

30
Seth Taddiken

私は、C#の乱数ジェネレーターがどのように機能するのか疑問に思っていました。

これは実装固有ですが、 疑似乱数ジェネレーターのウィキペディアエントリ からアイデアが得られます。

また、1〜100のランダムな整数値を生成するプログラムを作成する方法にも興味がありました。

Random.Next(int, int) を使用できます。

Random rng = new Random();
for (int i = 0; i < 10; i++)
{
    Console.WriteLine(rng.Next(1, 101));
}

上限はexclusiveであることに注意してください。これがここで101を使用した理由です。

また、Randomに関連付けられたいくつかの「落とし穴」に注意する必要があります。特に、notごとに新しいインスタンスを作成する必要があります。短い時間内に大量の乱数を生成すると、繰り返しが多く発生します。 このトピックに関する私の記事 を参照してください。

22
Jon Skeet

Random.Next(int maxValue) を使用できます。

Return:ゼロ以上、maxValue未満の32ビット符号付き整数。つまり、戻り値の範囲には通常、ゼロが含まれますが、maxValueは含まれません。ただし、maxValueがゼロの場合、maxValueが返されます。

_var r = new Random();
// print random integer >= 0 and  < 100
Console.WriteLine(r.Next(100));
_

ただし、この場合、次のように Random.Next(int minValue, int maxValue) を使用できます。

_// print random integer >= 1 and < 101
Console.WriteLine(r.Next(1, 101);)
// or perhaps (if you have this specific case)
Console.WriteLine(r.Next(100) + 1);
_
32
Zbigniew

私はしばらくの間、インターネットでRNGを検索しています。私が見たものはすべて複雑すぎるか、探していたものではありませんでした。いくつかの記事を読んだ後、この簡単なコードを思いつくことができました。

{
  Random rnd = new Random(DateTime.Now.Millisecond);
  int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 };
  textBox1.Text = Convert.ToString(b[rnd.Next(10)])
}

簡単な説明、

  1. 1次元整数配列を作成します。
  2. 順序付けられていない数字で配列をいっぱいにします。
  3. rnd.Nextを使用して、選択される番号の位置を取得します。

これはうまく機能します。

100未満の乱数を取得するには

{
  Random rnd = new Random(DateTime.Now.Millisecond);
  int[] b = new int[10] { 5, 8, 1, 7, 3, 2, 9, 0, 4, 6 };
  int[] d = new int[10] { 9, 4, 7, 2, 8, 0, 5, 1, 3, 4 };
  textBox1.Text = Convert.ToString(b[rnd.Next(10)]) + Convert.ToString(d[rnd.Next(10)]);
}

3、4、5、および6 ...桁の乱数についても同様です。

これが誰かを積極的に支援することを願っています。

0
Arrai