2011-01-25 74 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 
} 

(請不要拍我)