2012-04-09 2 views
3

Ich entwickle eine einfache Quiz-App auf Android. Die Fragen im Quiz sollten im Laufe des Quiz schwieriger werden. Jetzt versuche ich eine statische Methode zu implementieren, die eine Liste von Question Objekten aufnimmt und eine Unterliste der entsprechenden Fragen erstellt und auswählt, abhängig von der Schwierigkeit, und sie sollte bestellt werden (Die erste Frage in der Liste ist die einfachste Frage) . Die App hat 3 Stufen (Modi) von Schwierigkeiten. HierMachen Sie 3 Schwierigkeitsstufen in einer Quiz-App

ist die Methode Schnipsel:

public static List<Question> getQuestions(List<Question> availableQuestions, 
             int quizDifficulty, int numberOfQuestion) 
{ 
    if(availableQuestions.size() < numberOfQuestion) 
     throw NotEnoughQuestionsException(); 

    List<Question> questions = new ArrayList<Question>(numberOfQuestion); 
    if(quizDifficulty == 0) // Easy 
    { 
     // ... 
     return questions; 
    } 
    else if(quizDifficulty == 2) // Hard 
    { 
     // ... 
     return questions; 
    } 
    else /*if(quizDifficulty == 1)*/ // Normal 
    { 
     // ... 
     return questions; 
    } 
} 

Question Jedes Objekt ein Feld hat, das in difficulty Bereich 1 (most simple) zu 10 (most difficult), und dieses Feld kann den Zugriff durch getDifficulty() Methode.

Wie ich einen Weg, obwohl das Verfahren zu implementieren, entschied ich mich die Fragen der Schwierigkeiten sollten nicht 8 für Easy Modus überschreiten Ebene zu machen, und sie sollten 3 im Hard Modus und zwischen Ebene 9 als Ebene mehr und Ebene 2 im Modus Normal.

Das Problem ist, dass die bereitgestellte Liste von Fragen availableQuestions nicht alle erforderlichen Ebenen der Schwierigkeiten enthalten garantiert zum Beispiel alle Fragen sind in Stufe 1.

Also, meine Frage ist, was ist das beste Idee, diese Methode zu implementieren?


EDIT:

Hier meine Fortschritte ist so weit:

public static List<Question> getQuestions(List<Question> availableQuestions, 
             int quizDifficulty, int numberOfQuestion) 
{ 
    if(availableQuestions.size() < numberOfQuestion) 
     throw NotEnoughQuestionsException(); 

    List<Question> questions = new ArrayList<Question>(numberOfQuestion); 
    Map<Integer, List<Question>> map = new HashMap<Integer, List<Question>>(); 
    for(int i = 1; i <= 10; i++) map.put(i, new ArrayList<Question>()); 
    for(Question question : availableQuestions) 
     map.get(question.getDifficulty()).add(question); 

    int L1 = map.get(1).size(); // number of questions with level 1 
    int L2 = map.get(2).size(); 
    int L3 = map.get(3).size(); 
    int L4 = map.get(4).size(); 
    int L5 = map.get(5).size(); 
    int L6 = map.get(6).size(); 
    int L7 = map.get(7).size(); 
    int L8 = map.get(8).size(); 
    int L9 = map.get(9).size(); 
    int L10 = map.get(10).size(); 

    final int L1_TO_L8 = 0; 
    final int L1_TO_L9 = 1; 
    final int L1_TO_L10 = 2; 
    final int L2_TO_L9 = 3; 
    final int L2_TO_L10 = 4; 
    final int L3_TO_L10 = 5; 

    int status; 

    if(difficulty == 0) // Easy (level 1 to level 8) 
    { 
     int missing = questionsCount - (L1+L2+L3+L4+L5+L6+L7+L8); 
     if(missing > 0) // not enough questions in L1 through L8 
     { 
      if(missing - L9 > 0) // we must include all the level 
      { 
       status = L1_TO_L10; 
      } 
      else // enough questions in L1 through L9 
      { 
       status = L1_TO_L9; 
      } 
     } 
     else // enough questions in L1 through L8 
     { 
      status = L1_TO_L8; 
     } 
    } 
    else if(difficulty == 2) // Hard (level 3 to level 10) 
    { 
     int missing = questionsCount - (L3+L4+L5+L6+L7+L8+L9+L10); 
     if(missing > 0) // not enough questions in L3 through L10 
     { 
      if(missing - L2 > 0) // we must include all the level 
      { 
       status = L1_TO_L10; 
      } 
      else // enough questions in L2 through L10 
      { 
       status = L2_TO_L10; 
      } 
     } 
     else // enough questions in L3 through L10 
     { 
      status = L3_TO_L10; 
     } 
    } 
    else /*if(difficulty == 1)*/ // Normal (level 2 to level 9) 
    { 
     int missing = questionsCount - (L2+L3+L4+L5+L6+L7+L8+L9); 
     if(missing > 0) // not enough questions in L2 through L9 
     { 
      if(missing - L1 > 0) // we must include all the level 
      { 
       status = L1_TO_L10; 
      } 
      else // enough questions in L1 through L9 
      { 
       status = L1_TO_L9; 
      } 
     } 
     else // enough questions in L2 through L9 
     { 
      status = L2_TO_L9; 
     } 
    } 

    // ... 
} 
+0

die einzig mögliche Antwort lautet: wenn es keine Fragen der erforderlichen Schwierigkeiten sind, bringen sie Fragen einer in der Nähe Schwierigkeit statt, oder gar keine * (je nach Anforderungen Ihrer App) *. Gibt es hier eine echte Frage? –

Antwort

0

ich meine eigenen Algorithmus implementiert haben und es funktioniert einfach perfekt, obwohl es hat eine Menge von duplizierten Codes:

public static List<Question> getQuestions(List<Question> availableQuestions, 
             int quizDifficulty, int numberOfQuestion) 
{ 
    if(availableQuestions.size() < numberOfQuestion) 
     throw NotEnoughQuestionsException(); 

    List<Question> questions = new ArrayList<Question>(numberOfQuestion); 
    Map<Integer, List<Question>> map = new HashMap<Integer, List<Question>>(); 
    for(int i = 1; i <= 10; i++) map.put(i, new ArrayList<Question>()); 
    for(Question question : availableQuestions) 
    map.get(question.getDifficulty()).add(question); 

    int L1 = map.get(1).size(); // number of questions with level 1 
    int L2 = map.get(2).size(); 
    int L3 = map.get(3).size(); 
    int L4 = map.get(4).size(); 
    int L5 = map.get(5).size(); 
    int L6 = map.get(6).size(); 
    int L7 = map.get(7).size(); 
    int L8 = map.get(8).size(); 
    int L9 = map.get(9).size(); 
    int L10 = map.get(10).size(); 

    final int L1_TO_L8 = 0; 
    final int L1_TO_L9 = 1; 
    final int L1_TO_L10 = 2; 
    final int L2_TO_L9 = 3; 
    final int L2_TO_L10 = 4; 
    final int L3_TO_L10 = 5; 

    int status; 

    if(difficulty == 0) // Easy (level 1 to level 8) 
    { 
     int missing = questionsCount - (L1+L2+L3+L4+L5+L6+L7+L8); 
     if(missing > 0) // not enough questions in L1 through L8 
     { 
      if(missing - L9 > 0) // we must include all the level 
      { 
       status = L1_TO_L10; 
      } 
      else // enough questions in L1 through L9 
      { 
       status = L1_TO_L9; 
      } 
     } 
     else // enough questions in L1 through L8 
     { 
      status = L1_TO_L8; 
     } 
    } 
    else if(difficulty == 2) // Hard (level 3 to level 10) 
    { 
     int missing = questionsCount - (L3+L4+L5+L6+L7+L8+L9+L10); 
     if(missing > 0) // not enough questions in L3 through L10 
     { 
      if(missing - L2 > 0) // we must include all the level 
      { 
       status = L1_TO_L10; 
      } 
      else // enough questions in L2 through L10 
      { 
       status = L2_TO_L10; 
      } 
     } 
     else // enough questions in L3 through L10 
     { 
      status = L3_TO_L10; 
     } 
    } 
    else /*if(difficulty == 1)*/ // Normal (level 2 to level 9) 
    { 
     int missing = questionsCount - (L2+L3+L4+L5+L6+L7+L8+L9); 
     if(missing > 0) // not enough questions in L2 through L9 
     { 
      if(missing - L1 > 0) // we must include all the level 
      { 
       status = L1_TO_L10; 
      } 
      else // enough questions in L1 through L9 
      { 
       status = L1_TO_L9; 
      } 
     } 
     else // enough questions in L2 through L9 
     { 
      status = L2_TO_L9; 
     } 
    } 

    if(status == L1_TO_L8) // Look into level 1 through level 8 only 
    { 
     int q = 0; 
     for(int level = 1; level <= 8 && q < numberOfQuestion; level += 8 * q <= numberOfQuestion * level? 0 : 1) 
     { 
      if(level == 1) 
      { 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
      } 
      else if(level == 2) 
      { 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
      } 
      else if(level == 3) 
      { 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
      } 
      else if(level == 4) 
      { 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
      } 
      else if(level == 5) 
      { 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
      else if(level == 6) 
      { 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
      else if(level == 7) 
      { 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
      else if(level == 8) 
      { 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
     } 
    } 
    else if(status == L1_TO_L9) 
    { 
     int q = 0; 
     for(int level = 1; level <= 9 && q < numberOfQuestion; level += 9 * q <= numberOfQuestion * level? 0 : 1) 
     { 
      if(level == 1) 
      { 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 2) 
      { 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 3) 
      { 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 4) 
      { 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 5) 
      { 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 6) 
      { 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
      else if(level == 7) 
      { 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
      else if(level == 8) 
      { 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
      else if(level == 9) 
      { 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 1)){q++; continue;} 
      } 
     } 
    } 
    else if(status == L2_TO_L9) 
    { 
     int q = 0; 
     for(int level = 2; level <= 9 && q < numberOfQuestion; level += 9 * q <= numberOfQuestion * level? 0 : 1) 
     { 
      if(level == 2) 
      { 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 3) 
      { 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 4) 
      { 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 5) 
      { 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
      } 
      else if(level == 6) 
      { 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
      else if(level == 7) 
      { 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
      else if(level == 8) 
      { 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
      else if(level == 9) 
      { 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
     } 
    } 
    else if(status == L2_TO_L10) 
    { 
     int q = 0; 
     for(int level = 2; level <= 10 && q < numberOfQuestion; level += 10 * q <= numberOfQuestion * level? 0 : 1) 
     { 
      if(level == 2) 
      { 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 3) 
      { 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 4) 
      { 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 5) 
      { 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 6) 
      { 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 7) 
      { 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
      else if(level == 8) 
      { 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
      else if(level == 9) 
      { 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
      else if(level == 10) 
      { 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 2)){q++; continue;} 
      } 
     } 
    } 
    else if(status == L3_TO_L10) 
    { 
     int q = 0; 
     for(int level = 3; level <= 10 && q < numberOfQuestion; level += 10 * q <= numberOfQuestion * level? 0 : 1) 
     { 
      if(level == 3) 
      { 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 4) 
      { 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 5) 
      { 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 6) 
      { 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
      } 
      else if(level == 7) 
      { 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
      } 
      else if(level == 8) 
      { 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
      } 
      else if(level == 9) 
      { 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
      } 
      else if(level == 10) 
      { 
       if(check(readyQuestionsList, map, 10)){q++; continue;} 
       if(check(readyQuestionsList, map, 9)){q++; continue;} 
       if(check(readyQuestionsList, map, 8)){q++; continue;} 
       if(check(readyQuestionsList, map, 7)){q++; continue;} 
       if(check(readyQuestionsList, map, 6)){q++; continue;} 
       if(check(readyQuestionsList, map, 5)){q++; continue;} 
       if(check(readyQuestionsList, map, 4)){q++; continue;} 
       if(check(readyQuestionsList, map, 3)){q++; continue;} 
      } 
     } 
    } 
    else /*if(status == L1_TO_L10)*/ 
    { 
     // same idea is implemented here 
    } 
    return questions; 
} 

private boolean check(List<Question> readyQuestionsList, Map<Integer, List<Question>> map, int level) 
{ 
    if(map.get(level).size() > 0 && map.get(level).get(0) != null) 
    { 
     readyQuestionsList.add(map.get(level).remove(0)); 
     return true; 
    } 
    return false; 
} 
1

ich wahrscheinlich durch Sortieren der Fragen nach der Anforderung, implementieren verschiedene Sortieralgorithmen für die verschiedenen Ebenen beginnen würde (die wichtigsten Fragen zuerst auf den aktuellen Schwierigkeitsgrad stellen). Dann werden nur die Fragen am Anfang der Liste ausgewählt.

Etwas wie folgt aus:

static final int[] easy = {1,2,3,4,5,6,7}; 
static final int[] medium = {3,4,5,6,7,8}; 
static final int[] hard = {4,5,6,7,8,9,10}; 

public static List<Question> getQuestions(List<Question> availableQuestions, 
     int quizDifficulty, int numberOfQuestion){ 

    if(quizDifficulty == 0) // Easy 
     Collections.sort(availableQuestions, new CompareQuestion(easy)); 
    else if(quizDifficulty == 2) // Hard 
     Collections.sort(availableQuestions, new CompareQuestion(hard)); 
    else if(quizDifficulty == 1) // Normal 
     Collections.sort(availableQuestions, new CompareQuestion(medium)); 

    int questions = availableQuestions.size(); 
    return availableQuestions.subList(0, numberOfQuestion <= questions ? numberOfQuestion : questions); 
} 

static class CompareQuestion implements Comparator<Question>{ 

    final int[] compareList; 

    public CompareQuestion(int[] compareList){ 
     this.compareList = compareList; 
    } 

    @Override 
    public int compare(Question q1, Question q2) { 
     boolean o1wanted = inList(q1.difficulty, compareList); 
     boolean o2wanted = inList(q2.difficulty, compareList); 

     if(o1wanted && o2wanted) return 0; 

     if(o1wanted && !o2wanted) return -1; 

     return 1; 
    } 

    public boolean inList(int a, int[] list){ 
     for(int i : list) if(a == i) return true; 
     return false; 
    } 
} 
0

Hoffentlich ich Ihre Frage richtig bin readin. Mein Vorschlag ist, etwas mit diesem Format zu tun:

level|question 

dann, wenn Ihre Frage in ein Array geschoben werden, von der Frage der Ebene zu trennen.

Ich weiß, dass Java nicht, aber hier ist die Idee, mit Objective-C

NSArray* components = [string componentsSeparatedByString:@"|"]; 
NSString* level = [components objectAtIndex:0]; 
NSString* question = [components objectAtIndex:1]; 

dann vergleichen, wenn level == selectedLevel

ich diese immer gefunden die einfachste Frage und sein Niveau unter Berücksichtigung nebeneinander, und kein Grund zur Sorge, dass die Frage und ihr Level nicht zusammenpassen.

1

Das ist, was ich tun würde.

  1. Starten Sie eine Schleife über die Liste der Fragen.
  2. Basierend auf dem Zustand für EASY: NORMAL: HARD, würde ich sie in die Liste aufnehmen
    • if (leicht)
      • if (Schwierigkeit < 8)
      • in der Liste. .... Ähnlich für hart und normal.
  3. Am Ende ich die Unterliste sortieren würde, einer der Sortier algos verwenden.

In diesem Fall, wenn specied Schwierigkeitsgrad nicht erfüllt wird, dann beenden Sie eine leere Fragenliste mit bis (zum Beispiel u erwähnt, das heißt, wenn alle Fragen der Schwierigkeitsgrad sind 1 und Sie fordern eine harte Schwierigkeit).

2

die einfachste Lösung ist es, alle Fragen erhalten, die bestimmte Ebene auf Ihrem Modus abhängig, dann können Sie diese Liste sortieren, zum Beispiel:

public static List<Question> getQuestions(List<Question> availableQuestions, 
    int quizDifficulty, int numberOfQuestion) 
    { 
     if(availableQuestions.size() < numberOfQuestion) 
      throw NotEnoughQuestionsException(); 

     List<Question> questionsForUserMode = getQuestionsFromMode(
         availableQuestions, quizDifficulty); 

     // sort this questionsForUserMode by Difficulty using comprator 
    } 

    // please put these magic numbers in constant fields or enum :) 
    public static List<Question> getQuestionsFromMode (List<Question> questions, 
      int mode) { 
    if (mode == 1) { 
     return getQuestionsWithCertainLevel(questions, 1, 8); 
    } 
    else if (moode == 2) { 
     return getQuestionsWithCertainLevel(questions, 2, 9); 
    } 
    else 
     return getQuestionsWithCertainLevel(questions, 3, 10); 
    } 

    private static List<Question> getQuestionsWithCertainLevel(
      List<Question> questions, int fromLeve, int toLevel) { 
    List<Question> subQuestions = new ArrayList<Question>(); 

    for(Question question: questions) { 
     if (question.getDifficulty() >= fromLevel && 
      question.getDifficulty() <= toLevel) { 
     subQuestions.add(question); 
     } 
    } 

    return subQuestions; 
    } 
Verwandte Themen