2015-12-18 25 views
1

我正在創建一個兒童棋盤遊戲,詢問隨機數學問題和玩家如果回答正確,他們會移動。我有一個主要的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; 
     } 
    } 

回答

2

它看起來像只生成一次用作索引的隨機數。

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

您需要每次都重新生成一個隨機數。您可以編寫一個輔助方法來執行此操作,或者將代碼放在參數中:

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

這可能需要額外的重構。

+0

我想你可能是對的!我一直盯着它太久沒有意識到這一點。新鮮的眼睛總是很好! – Travisty

相關問題