2011-05-29 217 views
-1

我知道這是個老東西,我已經尋找像每一個網站一個答案我張貼此之前,但我無法找到一個解決方案隨機生成問題

我使用C# - Windows窗體

,我有這個peice的代碼:

char[] options = { 'a', 'l', 'w' }; 

,我也有這樣的功能:

static Random rand = new Random(); 
    static char OptionPicker(char[] options) 
    { 
     rand = new Random(); 
     return options[rand.Next(0, 2)]; 
    } 

我的問題是,當我想瀏覽一個字符數組 並在這個數組的每一個上執行上一個函數時

我得到相同的選項選擇,它不會被定製?

你能告訴我該怎麼做嗎? 最好的問候。

+0

可能重複:// stackoverflow.com/questions/4528066/c-random-generation) – 2011-05-29 17:11:29

+0

-1因爲這是一個1000倍的複製和幾個dupe在相關列表中。完全標題匹配。 – 2011-05-29 17:12:18

回答

5

刪除rand = new Random();行,您創建兩次相同的對象。 rand.Next(0, 3)就足以生成新的隨機數。另外請確保你的上限是'3'而不是'2',因爲它是唯一的。

static Random rand = new Random(); 
static char OptionPicker(char[] options) 
{ 
    return options[rand.Next(0, 3)]; // 3 is exclusive so results will be 0,1,2 only. 
} 
+1

請注意,這(就像OP)顯然不是線程安全的,因爲'rand'是一個靜態變量。 – CodesInChaos 2011-05-29 16:54:43

0

不要每次都創建一個新的Random對象。

擺脫掉

rand = new Random(); 
0

刪除rand = new Random() - 重新創建快速連續它,你都使得它給你同樣的值各一次。

+0

thx很多工作 – 2011-05-29 16:43:13

2

一些事情。您需要每次都不重新創建隨機對象,或者使用不同的種子值重新創建它(在我的示例中,我只創建一次,並將種子值綁定到當前時間/毫秒)。

您應該使用範圍您的選擇基於陣列的實際長度,而不是硬編碼到2 ..

嘗試這樣的:(在一個控制檯應用程序)[C#隨機代](HTTP的

namespace SO_Console_test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      char[] options = { 'a', 'l', 'w' }; 
      Random rand = new Random(DateTime.Now.Millisecond); 

      for (int i = 0; i <= 100; i++) 
      { 
       Console.WriteLine(OptionPicker(options,rand).ToString()); 
      } 
      Console.ReadLine(); 
     } 


     public static char OptionPicker(char[] options, Random rand) 
     { 
      return options[rand.Next(0, options.Length)]; 
     } 

    } 
}