正确回答时显示下一个测验字符串

时间:2015-12-18 16:33:27

标签: java swing

我正在创建一个儿童桌面游戏,它会询问随机数学问题,如果他们回答正确,则会移动玩家。我有一个主要的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;
      }
    }

1 个答案:

答案 0 :(得分:2)

看起来你只生成一次用作索引的随机数。

int random2 = rand.nextInt(r1.ArraySize());
.
.
.
questionInit(random2);

每次都需要重新生成一个随机数。您可以编写辅助方法来执行此操作,或者只将代码放在参数中:

questionInit(rand.nextInt(r1.ArraySize()));

这可能需要额外的重构。