2010-02-26 6 views
0

Comment interdire l'utilisation de la fonction arc4random pour certains nubers?arc4random sauf quelques chiffres

Code actuel:

int random = (arc4random() % 92);

(nombres de 0 à 92)

Je veux ne désapprouve les numéros suivants: 31, 70, 91, 92

Répondre

9

D'abord, vous devrez changer

% 92 

à

% 93 

pour obtenir les numéros de 0..92

je ferais quelque chose comme ça

int random; 

do { 
    random = arc4random() % 93; 
} 
while (random == 31 || random == 70 || random == 91 || random == 92); 
+0

Ah, désolé, le code d'origine comptait un tableau, et je savais combien d'objets le tableau avait, donc Je viens d'écrire à la place :) Aidez-moi à comprendre le code; fondamentalement ce qu'il fait est d'obtenir un nombre aléatoire, et si le nombre est l'un des, obtenir un nouveau? merci (: – Emil

+1

@Emil - correct.Si c'est l'une des valeurs interdites, il suffit d'appeler à nouveau la méthode –

+0

Great! :) Merci, le code fonctionne :) – Emil

2

simple, continuent à demander des numéros:

get a new random number 
while the new number is one of the disallowed ones: 
    get a new random number 
return the random number 

Pseudo code, mais vous devriez avoir l'idée.

+0

Oui, c'est compris. :) – Emil

4

Si vous allez interdire les numéros 91 et 92, pourquoi ne pas les inclure dans votre mod?

L'expansion de la réponse précédente:

int random; 
do { 
    random = arc4random() % 91; 
} 
while (random == 31 || random == 70); 
+2

@harwig - J'y pensais aussi. Cependant, les laisser à l'intérieur, bien que moins efficaces du point de vue du codage et de l'exécution, sert à documenter le fait que nous excluons explicitement ces valeurs, au cas où quelqu'un déciderait de changer le module dans quelques années. –

+0

@ Bob Kaufman - très bon point, car je suis sûr que cela pourrait être une cause potentielle de maux de tête majeurs à l'avenir. – harwig

0

Solution pour Swift:

func randomValue(except: Int) -> Int { 
    var rand: Int = 0; 

    repeat { 
     rand = Int(arc4random_uniform(3) + 1) 
    } 
    while(rand == except) 

    return Int(rand) 
} 
+0

Merci, cela fonctionne pour une exception, mais pas pour une liste d'exceptions! :) – Emil

Questions connexes