2014-02-06 2 views
0

Я пытаюсь выбрать случайное число для й позиции, но у меня есть проблема со случайным методом, вот мой код:IOS - Выберите номер случайно

 int xPosition = [self placeRandomEnemy]; 
     car3.position = CGPointMake(xPosition, CGRectGetMidY(self.frame)); 

// метод случайный:

- (int)placeRandomEnemy { 

    int x1 = 60; 

    int x2 = 160 ; 

    int x3 = 260; 

    return arc4random() % (x1 , x2 , x3); 

} 

xPosition должно быть числом от x1 или x2 или x3, но мой метод не работает.

+0

«xPosition должно быть числом от x1 или x2 или x3» - Что заставляет вас говорить это? –

+1

(То, что вы закодировали, эквивалентно 'return arc4random()% 260;'. Посмотрите на «оператор запятой». И посмотрите «оператор модуля».) –

+0

@HotLicks Мне кажется, ему нужен случайный% 3, который будет использоваться как индекс в массив, который содержит 'x1',' x2' и 'x3', основываясь на моем чтении вопроса ... – nhgrif

ответ

1

Заменить return arc4random() % (x1 , x2 , x3); с

switch (arc4random_uniform(3)) { 
     case 0: 
      return x1; 
      break; 
     case 1: 
      return x2; 
      break; 
     default: 
      return x3; 
      break; 
    } 
+2

Рассмотрите возможность использования кода nhgrifs, он более чистый и читаемый. –

3
int placeRandomEnemey() { 
    static int xPos[] = { 60, 160, 260 }; 
    return xPos[arc4random_uniform(sizeof(xPos)/sizeof(xPos[0]))]; 
} 

Это вернет 60, 160, 260.


И он может быть использован как таковой:

car3.position = CGPointMake(placeRandomEnemy(), CGRectGetMidY(self.frame)); 
0

Вы можете принять эти значения в массиве, а затем вы можете получить случайный индекс, как таким образом.

NSArray *arr = [NSArray arrayWithObjects:@"1",@"2",@"3", nil]; 


int rand= arc4random()%[arr count]; 
NSLog(@"%d",rand); 

Теперь вы можете получить значение объекта at random.

int value = [[arr objectAtIndex:rand] intValue]; 

Это простое решение.

Для его получения могут быть разные методы.

+0

Зачем вам помещать объекты 'NSString' в массив, а не' NSNumber'? – nhgrif

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