我如何参考特定的数组列表

时间:2014-06-03 12:44:56

标签: java android arrays arraylist

我有一个带有两个数组的Arraylist。根据来自不同类的内容,我想要使用数组1或2中的信息。但是,我无法弄清楚如何在getQuestions方法中间接引用特定数组。 我能够以String格式在此类中接收正确的变量mQuestions1mQuestions2,并调用此mVersion

我的代码:

public class QuestionLab {

ArrayList<Question> mQuestions1, mQuestions2;
private static QuestionLab sQuestionLab;
private Context mAppContext;

private QuestionLab(Context appContext) {
    mAppContext = appContext;

    mQuestions1 = new ArrayList<Question>();
    mQuestions1.add(new Question(1, R.drawable.a, state));
    mQuestions1.add(new Question(2, R.drawable.b, state));
    mQuestions1.add(new Question(3, R.drawable.c, state));

    mQuestions2 = new ArrayList<Question>();
    mQuestions2.add(new Question(1, R.drawable.a, state));
    mQuestions2.add(new Question(2, R.drawable.b, state));
    mQuestions2.add(new Question(3, R.drawable.c, state));
}

public static QuestionLab get(Context c) {
  if (sQuestionLab == null) {sQuestionLab = new QuestionLab(c.getApplicationContext());}
  return sQuestionLab;
}

public Question getQuestion(int nr) {
 for (Question c : mQuestions) {if (c.getNr() == (nr)) return c;} return null;
}

public ArrayList<Question> getQuestions(){return mQuestions1}

mQuestions1确实有效,但不允许我在1&amp; 2,所以我想要像Arraylist(mVersion)

这样的东西

提前致谢!

2 个答案:

答案 0 :(得分:0)

这很容易。

构建一个包含多个子节点的HashMap或另一个Basic类。

你想随机选择哪个问题应该选择吗?为什么不创建一个被调用的helperClass(例如问题)

保留一个数组(列表)?

class Question {
  Arraylist<String> questions;
  //;getter and setter
}

public ArrayList<Question> getQuestions(){
 for (Question c : mQuestions) {
      ArrayList<String> dummyArray = c.getQuestions();
       if (c.size() > 0) {
       //randomize it, get it out, whateer.
       } 
 }
}

但是回到你的问题(以及一个不是一个很好的技巧的解决方案)。

public ArrayList>Questions> getQuestions() { 
    if (question_array_1 != null && question_array_2 != null) { 
       int qCnt = (questions_array_1.size() > question_array_2.size()) ? question_array_1.size() : question_array_2.size();
     for (int i = 0; <= qCnt; i++) { 
       String myQuestion = (Math.random(0,1) == 1) ? question_array_2.getQuestion() : question_array_1.getQuestion();
   //or merge it to another arraylist... 
     }
  } 
}

另一种技术是将它直接存储到SQLITED数据库中(我可以这样做。)。

最后但并非最不重要(在您的情况下可能不是一个好技术)将所有内容添加到一个

ArrayList<Question> array_list_all =  new ArrayList<Question>();
array_list_all.addAll(first_question_array);
array_list_all.addAll(second_question_array);

然后你可以预先知道并获得触发你的关卡或问题ID的问题。

答案 1 :(得分:0)

...
public static final int USE_FIRST = 0;
public static final int USE_SECOND = 1;


...
public Question getQuestion(final int mode, final int nr) {
    ArrayList<Question> listToUse = null;
    if (mode == USE_FIRST) {
         listToUse = mQuestions1;
    } else if (mode == USE_SECOND) {
         listToUse = mQuestions2;
    }
    for (Question q : listToUse) ...
}

如果您有两个以上,可以使用Map来存储问题列表:

Map<Integer, ArrayList<Question>> questionMap = new HashMap<Integer, ArrayList<Question>>();
questionMap.put(1, mQuestions1);
questionMap.put(2, mQuestions2);
questionMap.put(3, mQuestions3);

1 - &gt; ArrayList#1

2 - &gt; ArrayList#2

3 - &gt; ArrayList#3

希望我的问题是正确的