2017-07-05 1 views
0

J'ai une méthode qui doit comparer un entier avec un Arraylist et si le nombre sur l'entier est sur l'arraylist, je reçois un faux. Si le nombre entier n'est pas sur l'arraylist, je reçois un vrai. J'ai besoin de ça, parce que je fais un jeu questionnaire qui a quelques questions sur un BBDD et je ne peux pas montrer la même question deux fois. Aussi ces questions sont dans trois catégories: E, I et A. Je dois montrer cinq questions E, puis cinq questions I et ensuite cinq questions A.Comparer deux entiers ne fonctionne pas correctement dans Android

Donc je dois montrer des questions sans les répéter, et aussi 5 de chaque catégorie. Je fais ces méthodes mais je ne sais pas pourquoi cela répète quelques questions.

La seule chose qui fonctionne correctement est la catégorie questions. J'ai toujours 5 questions E, puis 5 questions et au moins 5 questions.

La méthode qui m'a dit que si les questions est sur le ArrayList:

private boolean checkRandom() 
{ 
    for(int i = 0; i < listRandom.size(); i++) 
    { 
     if(questionPosition == listRandom.get(i)) 
     { 
      return false; 
     } 
    } 

    return true; 
} 

J'essaie aussi avec « égaux », mais je le même résultat.

La méthode qui vérifie si la question est dans la bonne catégorie et n'est pas montré avant:

private void loadPhase() { 

    if (numQuestion < 15) 
    { 
     r = new Random(); 
     questionPosition = r.nextInt(listQuestions.size()); 

     if(numQuestion < 5) 
     { 
      while(!listPhase.get(questionPosition).equals("E") && (!listPhase.get(questionPosition).equals("E")|| !checkRandom())) 
      { 
       r = new Random(); 
       questionPosition = r.nextInt(listQuestions.size()); 
      } 
     } 
     else if(numQuestion > 4 && numQuestion < 10) 
     { 
      while(!listPhase.get(questionPosition).equals("I") && (!listPhase.get(questionPosition).equals("I")|| !checkRandom())) 
      { 
       r = new Random(); 
       questionPosition = r.nextInt(listQuestions.size()); 
      } 
     } 
     else if(numQuestion > 9) 
     { 
      while(!listPhase.get(questionPosition).equals("A") && (!listPhase.get(questionPosition).equals("A")|| !checkRandom())) 
      { 
       r = new Random(); 
       questionPosition = r.nextInt(listQuestions.size()); 
      } 
     } 

     listRandom.add(questionPosition); 

     header4questions.setText(listQuestions.get(questionPosition)); 

     answer1.setText(listAnswers.get(questionPosition * 4)); 
     answer2.setText(listAnswers.get((questionPosition * 4) + 1)); 
     answer3.setText(listAnswers.get((questionPosition * 4) + 2)); 
     answer4.setText(listAnswers.get((questionPosition * 4) + 3)); 

     numQuestion++; 
    } 
    else { 
     Toast.makeText(getApplicationContext(), "You have finished the quiz!", Toast.LENGTH_SHORT).show(); 

     uploadPoints(); 
    } 
} 

Alors, ce que j'ai est toutes les questions sur la bonne catégorie, mais répéter les questions et je Je ne sais pas pourquoi.

Quelqu'un peut-il m'aider?

Merci!

+2

Vous avez vraiment besoin de déboguer ce code pour trouver l'erreur. –

+0

Pour sélectionner des questions 'n' au hasard dans une' Liste' sans remplacement, utilisez 'Collections.shuffle' pour mélanger la liste, puis prenez-y les premiers éléments' n'. –

+0

@DawoodibnKareem Que voulez-vous dire par get (iny) est différent de get (objet)? est-ce mon erreur? – Imrik

Répondre

0

Remplacez votre retour comme ci-dessous

private boolean checkRandom() 
{ 
    for(int i = 0; i < listRandom.size(); i++) 
    { 
     if(questionPosition == listRandom.get(i)) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+0

J'essaie. Attendez! :) – Imrik

+0

non, cela ne fonctionne pas, il répète encore des questions. – Imrik

+0

Comme en question dit: _si le nombre sur l'entier est sur l'arraylist, je reçois un faux_ donc, c'est bien comme ça maintenant !! –

0

Bien que la conversion du ArrayList à un HashSet élimine efficacement les doublons, si vous avez besoin de préserver l'ordre d'insertion, je préfère vous suggère d'utiliser cette variante

list is some List of Strings 
 
Set <String> s = new LinkedHashSet < > (list);

Ensuite, si vous avez besoin d'un List référence, vous pouvez utiliser à nouveau le constructeur de conversion.

référence Réponse: https://stackoverflow.com/a/204004/8252521

Répondu par l'utilisateur: https://stackoverflow.com/users/27565/abahgat

+0

Je n'ai pas de doublons, je veux dire ... J'ai un nombre aléatoire qui est comparé à l'ArrayList avez les questions, mais ArrayList n'a pas de doublons. – Imrik

0

Je résous! Je dois changer la condition while comme ceci:

while(!listPhase.get(questionPosition).equals("E") || (listPhase.get(questionPosition).equals("E") && !checkRandom()))