Как сделать интервал не может быть использован дважды, когда он случайным образом генерирует их?


Я написал простую игру викторина для Android, и им в настоящее время возникли проблемы с внесением вопросы не появляются после того, как они были показаны мне.о'. Я не хочу, чтобы она спрашивала меня тот же вопрос два раза..

Этот метод я использую

 private void QBegin() {
   /*
    * Gets a random question
    */
    question = (TextView) findViewById(R.id.question);
    String[] types = { "Question one",
            "Question two", 
            "Question three", 
            "Question four",
            "Question five"};
    Random random = new Random();
    int qType = random.nextInt(types.length);
    question.setText(types[qType]);
    getAnswers(qType); //gets four answers
}

Им не уверен, если это будет работать, но, что, если я добавить что-то вроде

Редактировать : не работает..

    int i = 0;
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(qType);
    i++;
    if(list.contains(qType) && i != types.length + 1){
        return;
    } else {
        answerCounter.setText("Hit the bricks pal, you're done..");
    }

На http://stackoverflow.com мне сказали , добавить что-то вроде:

    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(types.length);
    Collections.shuffle(list);
    if(!list.contains(qType)){
        // help please, as I have no idea on what I should be doing!
    }


1571
2
задан 26 октября 2011 в 09:10 Источник Поделиться
Комментарии
2 ответа

Есть в основном два различных способа сделать это эффективно:


  • Задавать вопросы в список

  • Перетасовать список

  • Цикл по списку и показать вопросы

или:


  • Задавать вопросы в список

  • Выберите вопрос, чтобы показать случайным

  • Удалить вопрос из списка

  • Повторять до тех пор, пока список пуст

6
ответ дан 26 октября 2011 в 10:10 Источник Поделиться

Обычный способ-это начать с что-то вроде массива указателей, а затем перемешать их в (псевдо) случайном порядке с чем-то вроде Фишер-Йейтс перемешать.

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

4
ответ дан 26 октября 2011 в 09:10 Источник Поделиться