Контрольные вопросы дублируют выпуск - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в Java-программировании на Android, и у меня возникают проблемы с повторением моих вопросов Викторины (всего 50 вопросов). Мои вопросы и ответы добавляются на карту. Затем я вызываю свой метод setQuestion (), чтобы отобразить мои вопросы и ответы, которые работают отлично.

Map<String, String> userQuestions = new HashMap<String, String>();

int questionNumber = 1;

//all my questions go here

setQuestion();
}

public void setQuestion() 
{

Random randomQuestions = new Random();             
    List questions = new ArrayList<>();                          
    List repeatedQuestions = new ArrayList<>();         
    for (int i = 0; i <questionNumber; i++) 
       {
        while (true) 
          {
            questionNumber = randomQuestions.nextInt(50) +1;
            if (!questions.contains(randomQuestions)) 
              {                                                                                        
                repeatedQuestions.add(repeatedQuestions);
                break;
              }
           }
        }    
} 

Моя вторая попытка:

List<String> list = new ArrayList<String>(userQuestions.keySet()); 
Collections.shuffle(list, new Random(questionNumber)); 

Я попытался преобразовать мой HashMap в список, чтобы можно было использовать Collections.shuffle. К сожалению, это не мешает, и мои вопросы не в случайном порядке.

Моя третья попытка:

Random randomQuestions = new Random();
List<Integer> questions = new ArrayList<Integer>();

Integer questionNumber = randomQuestions.nextInt(50) + 1;
    if (!questions.contains(questionNumber))
    {
       questions.add(questionNumber);
    }                                                                                   

Это действительно рандомизирует мои вопросы, однако я все еще получаю дубликаты. Я действительно не понимаю, почему он не добавляет мой ранее названный номер вопроса?

1 Ответ

0 голосов
/ 01 июля 2018

Хранение вопросов в Hashmap не очень хорошая идея, вы можете попробовать ArrayList из Suitcase (Structure) для хранения небольших данных и Database для больших данных.

Теперь для генерации случайных вопросов каждый раз, когда вы можете использовать метод Shuffle.

Пример

 public void shuffle_ques() {

     // arrQuestions to store to all Questions and Answers
     // arrQuestions.size() gives total number of questions in arrQuestions

    for (int i = 0; i < arrQuestions.size(); i++) 
    { 
        this.arrshuffle.add(i); // arrshuffle to store all the values of i
    }

    shuffle(arrshuffle); // shuffling arrshuffle so we get rearranged values of i in array

}

Теперь мы можем использовать переставленные значения i в качестве индекса для загрузки вопросов.

Метод LoadQues

 public void LoadQues() {

    // int count = 0; (Global)
    // when calling LoadQues() method set count++ for next random ques.
    /* setting ques on textview by getting ques from arrQuestions
       and getting any random index number for question from arrshuffle.*/

    txtques.setText(arrQuestions.get(arrshuf.get(count)).Ques);
    btn1.setText(arrQuestions.get(arrshuf.get(count)).Opt1);
    btn2.setText(arrQuestions.get(arrshuf.get(count)).Opt2);
    btn3.setText(arrQuestions.get(arrshuf.get(count)).Opt3);
    btn4.setText(arrQuestions.get(arrshuf.get(count)).Opt4);
    ans = arrQuestions.get(arrshuf.get(count)).Ans;


}

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

...