lundi 29 mai 2017

Create a random quiz mode where every array part is only called once (Android Studio)

I'm a bit new to Android Studio and I want to make small quiz app. On the start screen there are two buttons. With the first button you just click through your questions and you can start at a specific question number if you want (this is already working). With the second button I wand to create a random mode BUT every question should only be asked once. So there should not be the possibility to get the same questions twice.

For that I created an Array:

public ArrayList<Integer> questionsDone = new ArrayList<>();

And got the lenght of the Question Array:

public int maxQuestions = QuestionLibrary.nQuestions.length;

then I have a function for updating the question:

private void updateQuestion(){

    //RANDOM MODE
    if (startNumber == -1) {
        if (questionsDone.size() >= maxQuestions) {
            finishQuiz();
        } else {
            nQuestionNumber = (int) (Math.random() * (maxQuestions));

            do {
                if (questionsDone.contains(nQuestionNumber)) {
                    nQuestionNumber = nQuestionNumber - 1;
                    if (nQuestionNumber == -1) {
                        nQuestionNumber = maxQuestions-1;
                    }
                } else {
                    questionsDone.add(nQuestionNumber);
                    notDone = true;
                }

            } while (notDone = false);
        }
    }
    nQuestionView.setText(nQuestionLibrary.getQuestion(nQuestionNumber));
    nButtonChoice1.setText(nQuestionLibrary.getChoice1(nQuestionNumber));
    nButtonChoice2.setText(nQuestionLibrary.getChoice2(nQuestionNumber));
    nButtonChoice3.setText(nQuestionLibrary.getChoice3(nQuestionNumber));

So my idea was that when I start random mode, i pass the value "-1". If the size of the array (questions done) equals the number of the available questions the quiz should stop. If not, I just get a random number and multiply it with the number of questions. Then there is a do-while function which makes sure that if the questionsDone-Array already contains the number it will get a new number and after getting a number which is not in the array it will be stored in the array.

This is what the app does when I click on random mode:

It always shows a random question but sometimes one questions is asked twice and more. And suddenly it stops (the app is loading the result page) but the stop does not come with a pattern. When I have 7 questions, every questions is minimum asked once and sometimes it stops afer 15, sometimes after 20 questions and so on.

Does someone know why?




Aucun commentaire:

Enregistrer un commentaire