可能從 Random 取出重複的數值

  • 1267
  • 0
  • C#
  • 2017-02-25

如果 Random 使用不當,也是可以取出重複的數~!!

基本用方如下,這沒問題

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

 

把產生亂數的地方函數化後

using System;

namespace random
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(getRandomInt());
            }
            Console.ReadKey();
        }

        public static int getRandomInt()
        {
            Random random = new Random();
            return random.Next(0, 10);
        }
    }
}

結果變成
亂數變得不亂數,反而變成重複了。

 

解決方式:

其實只要在產生亂數時,都使用同一個實體
就是不要在 一直宣告新的 Random,這個功能就恢復正常了
 

using System;

namespace random
{
    class Program
    {
        static Random random = new Random();
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(random.Next(0, 10));
            }
            Console.ReadKey();
        }
    }
}