我正在尝试制作一个多项选择测验程序。 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.
}
答案 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
,这样您就可以在列表末尾轻松处理。