2011-01-25 108 views
3
Random random = new Random(); 
int randomx = random.Next(0, 240); 

这是我得到我的随机数的方式,从0到240,怎样才能得到只有积分与5相除? (包括0)除以5的随机数

0,5,10,15,20,25 .. 240

+1

什么,没有用'x = 1; while((x%5)> 0)x = random.Next(0,240);'解答? :-) – paxdiablo

+1

@paxdiablo:不!你是第一个! –

+1

@paxdiablo:理论上可能你的代码在循环中处于暂停状态。 –

回答

18

如何:

Random random = new Random(); 
return random.Next(0, 48) * 5; 

或者,如果你需要包括240,为您的列表指示:

Random random = new Random(); 
return random.Next(0, 49) * 5; 
+0

谢谢......不能相信答案太简单了。 –

+3

+1,但我认为如果你想要包含240,你的数字应该是49而不是48.它的顶端是_exclusive_,所以你现在得到的最高数字是47x5或235.为你修复了这个问题。 – paxdiablo

+0

你是对的:) – marcind

4
Random random = new Random(); 
int randomx = random.Next(0, 48) * 5; 
+0

让我们把它作为重复关闭:p(我知道,这只是迟了几秒) –

7

这里有一个(非常糟糕,因此社区维基)的方式来做到这一点:

Random random = new Random(); 
int randomx = 1; 
while ((randomx % 5) > 0) 
    randomx = random.Next (0,240); 

:-)

随意这个答案downvote被遗忘。这实际上只是为了防止他人发布。

+3

好的。谁会把我推荐给谁?这在_all!_中没有用处,除了作为_not_做什么的指示符之外。 – paxdiablo

+0

不能让这个答案留下! – 2011-01-25 03:01:44

+0

哦,至少它永远不会超出接受的答案。我想这是一些东西:-) – paxdiablo

2

response to paxdiablo

警告幽默代码不是很适合生产环境

public static IEnumerable<int> RandomGen(int minValue, int maxValue) 
{ 
    var random = new Random(); 
    while (true) yield return random.Next(minValue, maxValue); 
} 

public static IEnumerable<int> RandomGen(int minValue, int maxValue, params Func<int, bool>[] predicates) 
{ 
    return RandomGen(minValue, maxValue) 
     .Where(rnd => predicates.Aggregate(true, (a, pred) => a && pred(rnd))); 
} 

这种方式可以简单地

foreach (var x in RandomGen(0, 240, r => (r%5)==0)) 
{ 
// use x 
} 

(请不要拍我)