我正在创建一个儿童桌面游戏,它会询问随机数学问题,如果他们回答正确,则会移动玩家。我有一个主要的BoardGUI类,包括2个面板。一个是董事会,一个是问题。
我在问题面板上遇到了问题。我正在从文本文件中读取问题并将每个问题保存为数组中的对象。问题是我可以正确回答一个问题,它会用新问题刷新问题,但不会继续这样做。
我会粘贴QuestionGUI类,因为我认为这是与从随机数生成相同问题/答案有关的问题。
public class QuestionGUI extends JPanel implements ActionListener {
JLabel question;
JButton btnAnswers[];
Reader r1 = new Reader();
Questions q1 = new Questions();
Random rand = new Random();
boolean answered;
int random = rand.nextInt(r1.ArraySize());
int random2 = rand.nextInt(r1.ArraySize());
int length = q1.getArrayItem(random).getAnswers().length;
public QuestionGUI() {
questionInit(random);
}
public void questionInit(int randomNum) {
this.random = randomNum;
//gets the answers from the array obj
String[] answers = q1.getArrayItem(random).getAnswers();
//sets the question from question of array obj (same obj as answers I assumed, using random num)
question = new JLabel("<html>" + (q1.getArrayItem(random).getQuestion()) + "</html>", SwingConstants.CENTER);
question.setPreferredSize(new Dimension(280, 100));
add(question);
btnAnswers = new JButton[length];
for (int i = 0; i < length; i++) {
btnAnswers[i] = new JButton(answers[i]);
btnAnswers[i].setPreferredSize(new Dimension(280, 60));
btnAnswers[i].addActionListener(this);
add(btnAnswers[i]);
}
}
@Override
public void actionPerformed(ActionEvent e) {
//sets the correct answers to question also using the random num
String[] correctAnswers = q1.getArrayItem(random).getCorrectAnswers();
for (int i = 0; i < length; i++) {
if (e.getSource().equals(btnAnswers[i])) {
String tmp1 = btnAnswers[i].getText();
if (Arrays.asList(correctAnswers).contains(tmp1)) {
System.out.println("Correct");
removeAll();
revalidate();
answered = true;
questionInit(random2);
repaint();
} else {
answered = false;
}
}
}
}
public boolean getAnswered() {
return answered;
}
}
答案 0 :(得分:2)
看起来你只生成一次用作索引的随机数。
int random2 = rand.nextInt(r1.ArraySize());
.
.
.
questionInit(random2);
每次都需要重新生成一个随机数。您可以编写辅助方法来执行此操作,或者只将代码放在参数中:
questionInit(rand.nextInt(r1.ArraySize()));
这可能需要额外的重构。