Помните предыдущий вывод в случайном массиве - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть приложение со следующим кодом, перечисленным ниже, которое отображает случайные вопросы для конечного пользователя.Я пытаюсь выяснить, как сделать так, чтобы пользователь мог перемещаться назад в массиве, который отображается случайным образом.Например, пользователь просматривает вопросы и случайно проходит мимо и хочет вернуться, я хочу, чтобы они могли просто нажать кнопку «Назад».Не могли бы вы дать какие-либо рекомендации о том, как это сделать?Большое спасибо !!!

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

  myArray5= [NSArray arrayWithObjects:           
      @"Question 1",
      @"Question 2",
      @"Question 3",
      @"Question 4",
      nil];

  int chosen = arc4random() % [myArray5 count]; 
  NSString *item = [myArray5 objectAtIndex: chosen];
  label3.text = [NSString stringWithFormat: @"%@", item];
  label3.alpha = 0;
  label3.transform = CGAffineTransformIdentity;
  [UIView beginAnimations:nil context:NULL];
  [UIView setAnimationDuration:1.0];
  label3.alpha = 1;
  label3.transform = CGAffineTransformMakeScale(1, 1);
  [UIView commitAnimations];
  UITouch *touch = [[event allTouches] anyObject];
  if (touch.tapCount == 2) {
  }
}

Ответы [ 3 ]

0 голосов
/ 21 сентября 2010

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

const int NUM_QUEsTIONS = 1000; // Arbitrary number
int questions[NUM_QUESTIONS];

init()
{
    for (int i = 0; i < NUM_QUESTIONS; ++i)
    {
        questions[i] = RandomNumber();
    }
}

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

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

0 голосов
/ 22 сентября 2010

Пара идей:

Идея 1. Сохраните идентификаторы для выбранного вопроса в дополнительном массиве.

Идея 2. Рандомизировать массив и пройти по нему.

Идея 3. Если вы хотите избежать повторного использования вопроса, вы можете

  • используйте индекс, чтобы указать, сколько вопросов может быть выбрано
  • на основе этого индекса вы создаете случайное целое число
  • вы отображаете вопрос, который хранится в массиве в этой случайной позиции
  • Вы перемещаете элемент в этой позиции к максимальному индексу
  • Вы уменьшаете максимальный индекс

вроде как:

  NSMutableArray *array = [NSMutableArray arrayWithObjects: @"a", @"b", @"c", @"d", @"e", @"f", nil];
 NSInteger maxIndex = [array count]-1;
 do {

  NSInteger randomIndex = arc4random() % (maxIndex+1);

  NSLog(@"%@", [array objectAtIndex:randomIndex]);
  [array exchangeObjectAtIndex:randomIndex withObjectAtIndex:maxIndex];
  maxIndex--;



 } while (maxIndex > -1);
0 голосов
/ 21 сентября 2010

Конечно, вы можете создать NSMutableArray, который хранит индексы (выбранные int) ваших случайно выбранных вопросов. Вы также можете захотеть взглянуть на UINavigationController , который предоставляет средства для навигации назад в серии представлений. Наконец, вы должны подумать об инкапсуляции вашей логики вопроса. Похоже, у вас есть код для вашего интерфейса и код для ваших Вопросов в одном классе. Как только ваше приложение станет больше, вы столкнетесь с проблемами при таком подходе. Посмотрите на концепцию Model-View-Controllers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...