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

C'est ainsi que j'obtiens mon nombre aléatoire, de 0 à 240, comment obtenir seulement des intégrales qui se divisent avec 5? (0 inclus)Nombre aléatoire qui divise par 5

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

+1

Quoi, pas -un avec le 'x = 1; while ((x% 5)> 0) x = random.Next (0,240); 'solution? :-) – paxdiablo

+1

@paxdiablo: Non! Tu es le premier! –

+1

@paxdiablo: Théoriquement, il est possible que votre code soit en attente dans la boucle pendant un temps loooong. –

Répondre

18

Que diriez-vous ceci:

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

Ou, si vous avez besoin 240 inclus, comme votre liste indique:

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

Merci ... je ne peux pas croire que la réponse était si simple. –

+3

+1, mais je pense que si vous voulez inclure 240, votre nombre devrait être 49 plutôt que 48. C'est _exclusive_ à l'extrémité supérieure, donc le nombre le plus élevé que vous obtiendrez est 47x5 ou 235. Fixé cela pour vous. – paxdiablo

+0

Vous avez raison :) – marcind

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

fermons cela comme doublon: p (je sais, il est seulement quelques secondes en retard) –

7

Voici un (très mauvais, d'où le wiki de la communauté) façon de le faire:

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

:-)

Ne hésitez pas à downvote cette réponse dans l'oubli. C'est vraiment juste pour empêcher les autres de l'afficher.

+3

D'accord. Qui m'a mis en colère? Ce n'est pas utile à _all! _ Autre que comme un indicateur de ce que _not_ à faire. – paxdiablo

+0

Impossible de laisser cette réponse rester enterré! –

+0

Eh bien, au moins, ça ne dépassera jamais la réponse acceptée. Je suppose que c'est quelque chose :-) – paxdiablo

2

En response to paxdiablo.

AVERTISSEMENTCode Humour pas très approprié pour les environnements de production

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))); 
} 

De cette façon, vous pouvez simplement

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

(s'il vous plaît ne me tuez pas)