2010-02-26 4 views

ответ

9

во-первых, вам необходимо изменить

% 92 

до

% 93 

, чтобы получить число от 0..92

Я хотел бы сделать что-то вроде этого

int random; 

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

Ах, извините, исходный код подсчитывал массив, и я знал, сколько объектов массива было, так Я просто написал это вместо: Помогите мне понять код; в основном, то, что он делает, - это получить случайное число, а если номер какой-либо из них, получите новый? спасибо (: – Emil

+1

@Emil - правильно. Если это одно из запрещенных значений, просто вызовите метод еще раз. –

+0

Отлично! :) Спасибо, код работает :) – Emil

2

Простых, продолжайте просить номера:

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

псевдокод но вы должны получить эту идею.

+0

Да, понял. :) – Emil

4

Если вы собираетесь запретить номера 91 и 92, зачем включать их в свой мод?

Расширение на предыдущий ответ:

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

@harwig - Я тоже об этом думал. Однако, оставляя их, хотя и менее эффективные с точки зрения кодирования и исполнения, служит для документирования факта, что мы явно исключаем эти значения, на всякий случай, когда кто-то решает изменить модуль через несколько лет. –

+0

@Bob Kaufman - очень хороший момент, поскольку я уверен, что это может стать потенциальной причиной серьезных головных болей в будущем. – harwig

0

Solution для Swift:

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

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

    return Int(rand) 
} 
+0

Спасибо, что работает за одно исключение, но не для списка исключений! :) – Emil

Смежные вопросы