2012-04-09 4 views
3

Androidで簡単なクイズアプリを開発しています。クイズの質問は、クイズが進むにつれてより困難になるはずです。今、私はQuestionオブジェクトのリストを取り、難易度に応じて適切な質問のサブリストを生成し、それを注文する静的メソッドを実装しようとしています(リストの最初の質問は最も簡単です) 。アプリには3つのレベル(モード)の難点があります。ここクイズアプリで3つの難点を作る

メソッドの断片である:

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

各オブジェクトは10 (most difficult)範囲1 (most simple)にあるフィールドdifficultyを有し、このフィールドはgetDifficulty()方法によってアクセスすることができます。メソッドを実装する方法のけれども私は、私はレベル9間の質問困難がEasyモード用のレベル8を超えてはならない、と彼らはHardモードでレベル3以上である必要があり、中に作ることにしたとして

Normalモードではレベル2です。

問題が困難のすべての必要なレベルを含むことが保証されていないavailableQuestions質問の提供されたリストは、例えば、すべての質問は、だから、レベル1に

あり、私の質問が何であるか、ということですこの方法を実装するための最良のアイデアですか?


編集:ここでは

は、これまでの私の進歩である:

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

のみ可能答えはありません。必要な難易度のない質問が存在しない場合は、代わりに近くの難易度の質問を返す、またはすべてで何も*(あなたのアプリケーションの要件に応じて) *。ここに本当の質問はありますか? –

答えて

0

しかし、私は私自身のアルゴリズムを実装していると、それだけで完璧に動作しますそれは、重複コードをたくさん持っている:

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

私はおそらく異なるレベルに対して異なるソートアルゴリズムを実装し、要件の後に質問をソートすることによって開始します(現在の難易度に関する最も関連性の高い質問を最初に置く)。次に、リストの先頭から質問を選択するだけです。このような

何か:

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

がうまくいけば、私はあなたの質問が正しいreadinています。 私の提案は、この形式で何かをすることです:

level|question 

あなたの質問は、配列にプッシュされているときに、質問からレベルを区切ります。

私は、Javaを知っているが、ここで私は常に最も簡単な考慮あなたの質問とそのレベルが並んでいるこれを見つけたlevel == selectedLevel

場合はObjective-Cの

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

との考えで、その後比較しません質問とそのレベルが一致しないことを心配する必要はありません。

1

これは私がやることです。

  1. 質問のリストをループします。
  2. EASYための条件に基づいて:NORMAL:(簡単)
    • 場合(難易< 8)
    • リストに追加した場合HARD、私はリスト
      • にそれらを追加します。 ....同様にハードとノーマルの場合。終わり
  3. 私は、ソートALGOSのいずれかを使用して、サブリストを並べ替えます。この場合

は、specied難易度が満たされない場合は、すべての質問は、難易度1である場合、すなわちuは言及例えば、のための空の質問リストを(持ってしまうと、あなたは、ハード難易度を要求します)。

2

最も簡単な解決策は、あなたのモードに応じて、一定のレベルを持っているすべての質問を取得し、その後、あなたは、たとえば、このリストを並べ替えることができます:

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; 
    } 
関連する問題