3

Androidで簡単なクイズアプリを開発しています。クイズを進めるにつれて、クイズの質問はより難しくなるはずです。Question現在、オブジェクトのリストを取得し、難易度に応じて適切な質問のサブリストを生成(選択)する静的メソッドを実装しようとしています。これは順序付けする必要があります(リストの最初の質問が最も単純です)。アプリには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オブジェクトにはからの範囲内のフィールドdifficultyがあり、このフィールドにはメソッドでアクセスできます。1 (most simple)10 (most difficult)getDifficulty()

メソッドを実装する方法を考えたので、質問の難易度はモードのレベルを超えないようにし、モードでは8レベルを超え、モードではレベルとレベルの間にあるようにすることにしました。Easy3Hard92Normal

問題は、提供された質問のリストに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;
        }
    }

    // ...
}
4

5 に答える 5

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;
  }
于 2012-04-09T19:12:29.800 に答える
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;
    }
}
于 2012-04-09T17:44:16.160 に答える
1

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

  1. 質問のリストのループを開始します。
  2. EASY:NORMAL:HARDの条件に基づいて、それらをリストに追加します
    • if(簡単)
      • if(難易度<8)
      • リストに追加する。....同様にハードとノーマルの場合。
  3. 最後に、並べ替えアルゴリズムの1つを使用して、サブリストを並べ替えます。

この場合、指定された難易度が満たされない場合は、空の質問リストが作成されます(たとえば、前述のuの場合、つまり、すべての質問が難易度1で、難易度が高い場合)。

于 2012-04-09T18:02:57.053 に答える
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;
}
于 2012-04-09T23:33:20.567 に答える
0

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

level|question

次に、質問が配列にプッシュされているときに、レベルを質問から分離します。

私はJavaを知りませんが、Objective-cのアイデアがここにあります

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

次に、level == selectedLevel

あなたの質問とそのレベルが並んでいて、質問とそのレベルが一致しないことを心配する必要がないことを考えると、これは常に最も簡単だと思いました。

于 2012-04-09T17:50:05.737 に答える