如何将元素添加到方法外的对象的ArrayList中

时间:2015-12-27 15:43:44

标签: java arraylist

我正在尝试制作一个多项选择测验程序。 QuizQuestion类与Question对象一起使用,并且每次用户按下“Next Question”按钮时,都会保存用于在问题标签上设置文本和GUI类中的答案按钮的方法。

我的问题是,在显示ArrayList中的最后一个Question对象之后,它再次以第一个元素开始,而不是完成测验。我理解原因是getCurrentQuestion()方法,我将Question对象添加到ArrayList中,这样每次调用该方法时,相同的元素都会再次添加到ArrayList中。

我怎样才能解决这个问题,仍然可以通过getCurrentQuestion()和getCurrentAnswers()方法中的ArrayList索引访问每个Question变量? 有没有办法将我的Question对象添加到方法之外的ArrayList中?任何帮助将不胜感激。

这是我正在尝试做的一个例子:

QuizQuestion类:

import java.util.*;

public class QuizQuestion {


public int currentQuestionIndex = 0;
public String userAns;
public int correctAnswers;


public ArrayList<Question> questionBank = new ArrayList<Question>();

 Question question1 = new Question("What is 4 + 8", Arrays.asList("11", "14", "12"), "12");
 Question question2 = new Question("What is 24 - 7", Arrays.asList("17", "13", "16"), "17");
 Question question3 = new Question("What is 7 * 9", Arrays.asList("72", "63", "56"), "63");




public String getCurrentQuestion() {
    String question;
    questionBank.add(question1);
    questionBank.add(question2);
    questionBank.add(question3);
    question = questionBank.get(currentQuestionIndex).getQuestion();

    return question;
}


public List<String> getCurrentAnswers() {
    List <String> answrs;

    answrs = questionBank.get(currentQuestionIndex).getAnswers();
    return answrs;
}



}

然后在我的GUI类中,每次用户单击“下一步”按钮时都会调用一个方法:

 QuizQuestion quiz = new QuizQuestion();


 public void nextQuestion() {

    quiz.currentQuestionIndex = quiz.currentQuestionIndex + 1;
        label.setText(quiz.getCurrentQuestion()); 
        setButtons(quiz.currentQuestionIndex); //sets the text for possible answers on Radiobuttons.



    }

1 个答案:

答案 0 :(得分:0)

  

我的问题是在ArrayList中的最后一个Question对象之后   显示它再次从第一个元素开始而不是完成   测验。我明白原因是getCurrentQuestion()   我将Question对象添加到ArrayList

的方法

这几乎没有意义。返回的问题将始终是 SendKeys.Send("K") 位置的问题。但是,在您发布的代码中,它永远不会增加,因此应始终为0.您似乎忘记发布问题的一些重要部分...

尽管如此,如果您的目标是按照添加顺序的顺序检索它们,您可以使用LinkedList删除currentQuestionIndex并简单地调用poll检索并删除列表的第一个元素,这样每个调用都将返回下一个元素。

然后你可以摆脱这种方法:

currentQuestionIndex

将其更改为更有意义的内容(并且只在构造函数中调用一次):

public String getCurrentQuestion() {
    String question;
    questionBank.add(question1);
    questionBank.add(question2);
    questionBank.add(question3);
    question = questionBank.get(currentQuestionIndex).getQuestion();

    return question;
}

并只需使用public void addQuestions() { questionBank.add(question1); questionBank.add(question2); questionBank.add(question3); } 来检索下一个问题。当列表为空时,对questionBank.poll();的调用将返回poll,这样您就可以在列表末尾轻松处理。