2012-08-16 185 views
-4

我需要两个函数.one将生成随机偶数,第二个将生成随机奇数。是否有在c#中的内置函数?c中的随机数生成器#

感谢

+0

Random类? – h1ghfive 2012-08-16 09:54:46

+0

如果在奇数列表中添加奇数,并且甚至在偶数列表中添加,则生成一个数字。 – 2012-08-16 09:55:12

+0

提问之前做过一些研究吗? '随机'类这是你要求的 – harry180 2012-08-16 09:55:15

回答

1

你可以那样做:

private static int RandomNumberEven(int min, int max) 
     { 
      Random random = new Random(); 
      int ans = random.Next(min, max); 
      if (ans % 2 == 0) return ans; 
      else 
      { 
       if (ans + 1 <= max) 
        return ans + 1; 
       else if (ans - 1 >= min) 
        return ans - 1; 
       else return 0; 
      } 
     } 

private static int RandomNumberOdd(int min, int max) 
     { 
      Random random = new Random(); 
      int ans = random.Next(min, max); 
      if (ans % 2 == 1) return ans; 
      else 
      { 
       if (ans + 1 <= max) 
        return ans + 1; 
       else if (ans - 1 >= min) 
        return ans - 1; 
       else return 0; 
      } 
     } 
9

如果你没有对distribuition任何特殊要求,你可以使用常规的随机C#功能:

Random rnd = new Random(); 
      rnd.Next(int.MaxValue/2)*2; // an even integer 
      rnd.Next(int.MaxValue/2)*2+1; // an odd integer 

注意 你可能会调整最小/最大范围从而避免溢出并保持在您的范围内。

+1

@NikhilAgrawal如果你要求一个奇数/偶数你已经泄漏了随机性:但你需要一次调用偶数和一次奇数这两个不相关:) – 2012-08-16 10:13:51

+0

此代码可能会导致溢出并导致负数。您需要检查溢出或像这样限制它:rnd.Next(int.MaxValue/2); – 2012-08-16 10:18:33

+0

@TomasGrosup是的,你是正确的,它是在评论中,但我修改了代码无论如何工作。 – 2012-08-16 10:29:25

0

使用此

(我假设你需要10个奇数和10连号)

Random r = new Random(); 

List<int> even = new List<int>(); 
List<int> odd = new List<int>(); 

while(even.Count < 10 || odd.Count < 10) 
{ 
    int i = r.Next(); 
    if(i % 2 == 0) 
    { 
     if(!even.Contains(i) && even.Count < 10) 
      even.Add(i); 
    } 
    else 
    { 
     if(!odd.Contains(i) && odd.Count < 10) 
      odd.Add(i); 
    } 
} 
+0

您的代码正在寻找OP中没有说明的*独特*均数/赔率数字。如果请求的数量是>> 10 * Contains *会增加太多的复杂性。 – 2012-08-16 10:45:53